98

setWidth(int pixel)は、デバイスに依存しないピクセルまたは物理ピクセルを単位として使用しますか?たとえば、setWidth(100)は、ビューの幅を100ディップまたは100ピクセルに設定しますか?

ありがとう。

4

7 に答える 7

226

ピクセルを使用しますが、代わりにディップを使用する方法を疑問に思っていると思います。答えはにありTypedValue.applyDimension()ます。コードでディップをピクセルに変換する方法の例を次に示します。

// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
于 2010-03-09T05:06:18.383 に答える
27

コードで一定数の DIP を取得する正しい方法は、次のような dp 値を含むリソース XML ファイルを作成することです。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="image_width">100dp</dimen>
    <dimen name="image_height">75dp</dimen>
</resources>

次に、コード内のリソースを次のように参照します。

float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));

返された float は、デバイスのピクセル密度に応じてスケーリングされるため、アプリケーション全体で変換メソッドを複製し続ける必要はありません。

于 2013-02-17T14:15:27.477 に答える
10

メソッドsetWidth(100)、幅として100ピクセルを設定します(dpではありません)。したがって、さまざまなAndroid携帯で幅の変化に直面する可能性があります。したがって、ピクセルではなくdpで測定を使用します。サンプル幅のdpで測定を取得するには、以下のコードを使用します=300px、高さ=400px。

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());

int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
于 2014-11-01T06:35:38.220 に答える
2

私にとっては問題なく機能する上記の回答に基づいて、いくつかのヘルパーメソッドを生成し、それらをユーティリティに追加してプロジェクト全体で使用します。

   // value in DP
   public static int getValueInDP(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInDP(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    // value in PX
    public static int getValueInPixel(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInPixel(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }
于 2019-08-27T12:27:08.617 に答える
0

もちろん、ピクセル、メソッドはパラメーターとしてピクセルを求めています。

于 2010-03-09T04:33:16.780 に答える