【问题标题】:Convert dip to px in Android在 Android 中将 dip 转换为 px
【发布时间】:2011-12-06 11:28:58
【问题描述】:

我已经编写了从 dip 中获取像素的方法,但它不起作用。它给了我运行时错误。

实际上我是在单独的类中运行此方法并在我的 Activity 类中初始化

Board board = new Board(this);
board.execute(URL);

此代码异步运行。请帮帮我。

public float getpixels(int dp){
    //Resources r = boardContext.getResources();
    //float px = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpis, r.getDisplayMetrics());
        
    final float scale = this.boardContext.getResources().getDisplayMetrics().density;
    int px = (int) (dp * scale + 0.5f);

    return px;
}

【问题讨论】:

  • 你得到什么错误? boardContext 为空? getResources 为空?

标签: android density-independent-pixel


【解决方案1】:

试试这个:

Java

public static float dipToPixels(Context context, float dipValue) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics);
}

科特林

fun Context.dipToPixels(dipValue: Float) =
    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, resources.displayMetrics)

【讨论】:

  • 你会为像素返回什么浮点数?不应该强制转换为 int 吗?
  • 工作,但似乎将 w,h 应用于我的浮动活动,android 向左右添加 16dp(总共 32dp),对于 dipValue 我必须通过的是我在布局 xml + 32dp - 修复它
【解决方案2】:

可以在dimen.xml中添加dp值并使用

int pixels = getResources().getDimensionPixelSize(R.dimen.idDimension);

这更容易......

【讨论】:

    【解决方案3】:

    公式为:px = dp * (dpi / 160),用于 160 dpi 屏幕。请参阅 Convert dp units to pixel units 了解更多信息。

    你可以试试:

    public static int convertDipToPixels(float dips) {
        return (int) (dips * appContext.getResources().getDisplayMetrics().density + 0.5f);
    }
    

    希望这会有所帮助...

    【讨论】:

      【解决方案4】:

      试试这个不传递上下文

       public static float dipToPixels(float dipValue) {
           return TypedValue.applyDimension(
               TypedValue.COMPLEX_UNIT_DIP,
               dipValue,
               Resources.getSystem().getDisplayMetrics()
           );
       }
      

      【讨论】:

        猜你喜欢
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 2012-09-10
        • 1970-01-01
        • 2012-09-08
        • 2017-04-10
        • 2019-07-21
        • 2010-12-19
        相关资源
        最近更新 更多