Android筆記之dp與px之間的轉換以及LayoutParams


dp與px之間的轉換公式

px = dp * (dpi / 160)

dp = px / (dpi / 160)

其中dpi的獲取方式如下

    private void getDpi() {
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        Log.d(TAG, "metrics.densityDpi: " + metrics.densityDpi);
    }

160對應常量DisplayMetrics.DENSITY_DEFAULT

對於LayoutParams

其中的成員width和height都以px為單位,以下是轉換為dp的示例

        mainLinearLayout = findViewById(R.id.mainLinearLayout);
        ViewGroup.LayoutParams layoutParams = mainLinearLayout.getLayoutParams();
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int widthInDp = layoutParams.width / (metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
        int heightInDp = layoutParams.height / (metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
        Log.d(TAG, "widthInDp: " + widthInDp);
        Log.d(TAG, "heightInDp: " + heightInDp);

封裝好的工具類

PixelTool.java

package com.bu_ish.myapp;

import android.content.Context;
import android.util.DisplayMetrics;
import android.util.TypedValue;

public class PixelTool {
    public static int dpToPx(Context context, int dp) {
        return dp * (context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT);
    }

    public static int pxToDp(Context context, int px) {
        return px / (context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT);
    }

    public static float spToPx(Context context, float sp) {
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
    }

    public static int pxToSp(Context context, float px) {
        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (px / fontScale + 0.5f);
    }
}

參考博文:LayoutParams — 設置參數dp值(獲取了當前手機的手機密度信息)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM