android屏幕宽高和个尺寸单位转换工具类

杜楚
2023-12-01

1.工具类DensityUtil

package com.antbyte.collectionorder.utils;

import android.content.Context;
import android.content.res.Resources;
import android.view.Display;
import android.view.WindowManager;

import com.antbyte.collectionorder.MyApp;


/**
 * 屏幕宽高和尺寸转换
 * Created by yangjianli on 2017/8/26.
 */

public class DensityUtil {

    public static final String TAG = "DensityUtil";

    private static WindowManager windowManager;
    private static int width;
    private static int height;

    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public static int dip2px(Context context, float dpValue) {
        Resources resources = context.getResources();
        float scale = 0;
        if(resources != null){
            scale = resources.getDisplayMetrics().density;
        }

        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    public static int px2dip(Context context, float pxValue) {
        Resources resources = context.getResources();
        float scale = 0;
        if(resources != null){
            scale = resources.getDisplayMetrics().density;
        }
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * 将px值转换为sp值,保证文字大小不变
     *
     * @param pxValue
     *            (DisplayMetrics类中属性scaledDensity)
     * @return
     */
    public static int px2sp(Context context, float pxValue) {
        Resources resources = context.getResources();
        float fontScale = 0;
        if(resources != null){
            fontScale = resources.getDisplayMetrics().scaledDensity;
        }
        return (int) (pxValue / fontScale + 0.5f);
    }

    /**
     * 将sp值转换为px值,保证文字大小不变
     *
     * @param spValue
     *            (DisplayMetrics类中属性scaledDensity)
     * @return
     */
    public static int sp2px(Context context, float spValue) {
        Resources resources = context.getResources();
        float fontScale = 0;
        if(resources != null){
            fontScale = resources.getDisplayMetrics().scaledDensity;
        }
        return (int) (spValue * fontScale + 0.5f);
    }

    /**
     * 得到当前屏幕的分辨率的宽
     */
    public static int getScreenWidth() {
        if(windowManager == null){
            windowManager = (WindowManager) MyApp.mApp.getSystemService(Context.WINDOW_SERVICE);
            Display mDisplay = windowManager.getDefaultDisplay();
            // 宽高
            width = mDisplay.getWidth();
            height = mDisplay.getHeight();

        }
        return width;
    }

    /**
     * 得到当前屏幕的分辨率的高
     */
    public static int getScreenHeight() {
        if(windowManager == null){
            windowManager = (WindowManager) MyApp.mApp.getSystemService(Context.WINDOW_SERVICE);
            Display mDisplay = windowManager.getDefaultDisplay();
            // 宽高
            width = mDisplay.getWidth();
            height = mDisplay.getHeight();
        }
        return height;
    }

}

2.其中MyApp.mApp是获取的Application对象,自己可以设置一下,也可以改成传值个Context进来然后获取屏幕宽高。

 类似资料: