0

mdpi画面で正常に動作している別のスレッドで見つけたこのコードを使用しています:

public static float convertDpToPixel(float dp,Context context){
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        float px = dp * (metrics.densityDpi/160f);
        return px;
    }

public static float convertPixelsToDp(float px,Context context){
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        float dp = px / (metrics.densityDpi /160f);
        return dp;

    }

hdpi画面で使用すると、テキストサイズを大きくしようとするとテキストサイズがジャンプします。密度Dpiを分割するときにハードコードされた160fを使用しているためだと思いますか? 160dpi か 240dpi かを動的に判断する方法はありますか?

4

2 に答える 2

2

この方法を試してください:

public float dpToPx(float dp, Context context) {
    float density = context.getResources().getDisplayMetrics().density;
    return dp * density;
}
于 2012-12-06T23:11:39.017 に答える
1

ドキュメントから:

metrics.density 

は、探している倍率です。

これは、密度に依存しないピクセル単位のスケーリング係数であり、1 DIP は約 160 dpi の画面 (たとえば、240x320、1.5 インチ x 2 インチの画面) 上の 1 ピクセルであり、システムのディスプレイのベースラインを提供します。したがって、160dpi 画面では、この密度値は 1 になります。120 dpi の画面では .75 になります。等

于 2012-12-06T19:50:20.300 に答える