zoukankan      html  css  js  c++  java
  • 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值(获取了当前手机的手机密度信息)

  • 相关阅读:
    扩展KMP学习笔记
    【洛谷P5555】秩序魔咒【回文自动机】
    PAM(回文自动机)学习笔记
    形象理解转置原理在FFT中的应用
    NOIP2020考后总结与计划
    CSP2020游记
    JavaScript——面向对象编程
    JavaScript——实现继承的几种方式
    JavaScript闭包
    学习一门新编程语言的6个步骤
  • 原文地址:https://www.cnblogs.com/buyishi/p/10537109.html
Copyright © 2011-2022 走看看