setWidth(intピクセル)は、デバイスに依存しないピクセルまたは物理ピクセルを単位として使用しますか?たとえば、setWidth(100)はビューの幅を100ディップまたは100ピクセルに設定しますか?
ありがとう。
setWidth(intピクセル)は、デバイスに依存しないピクセルまたは物理ピクセルを単位として使用しますか?たとえば、setWidth(100)はビューの幅を100ディップまたは100ピクセルに設定しますか?
ありがとう。
回答:
ピクセルを使用しますが、代わりにディップを使用する方法を疑問に思っていると思います。答えはにありTypedValue.applyDimension()
ます。コードでディップをpxに変換する方法の例を次に示します。
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
コードで一定数の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));
返された浮動小数点数は、デバイスのピクセル密度に応じてスケーリングされるため、アプリケーション全体で変換メソッドを複製し続ける必要はありません。
メソッドsetWidth(100)、100 pxを幅として設定(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());
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;
ピクセルはもちろん、メソッドはパラメーターとしてピクセルを要求しています。
私にうまく機能する上記の回答に基づいて、私はいくつかのヘルパーメソッドを生成します。プロジェクト全体でそれらを使用するには、それらをユーティリティに追加するだけです。
// 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());
}