Android 设备屏幕信息(dip,sp,px的转换及其运用)
16lz
2021-01-23
一、参考
1、【Android技术】Android px、dp、sp之间相互转换
2、dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算
3、[Android] Android开发中dip,dpi,density,px等详解
4、getDimension与getDimensionPixelOffset与getDimensionPixelSize的区别
5、Android 获取控件的宽和高
6、手动修改屏幕密度:ro.sf.lcd_density
二、实例(屏幕信息,sp,dip,px的获取,转换,运用)
1、截图
si-1.png
2、代码
/** * 屏幕信息 * densityDpi = density * strDpi(160) * * 常用屏幕信息三种方法 * 方法1: * DisplayMetrics mDisplayMetrics = new DisplayMetrics();//屏幕分辨率容器 getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics); 方法2: DisplayMetrics mDisplayMetrics = getResources().getDisplayMetrics(); 方法3: Display mDisplay = getWindowManager().getDefaultDisplay(); * */ private void testScreenInfo(){ //屏幕尺寸 DisplayMetrics dm = getResources().getDisplayMetrics(); int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels; int screenDensityDpi = dm.densityDpi; //屏幕密度 float screenDessity = dm.density; //屏幕密度比 float scaleDensity = dm.scaledDensity; //文字密度比(放大像素) String screeninfo = "屏幕实际尺寸:"+screenWidth+"*"+screenHeight+ "\n界面密度(标准160):"+screenDensityDpi+ "\n屏幕密度比:"+screenDessity+",文字密度比:"+scaleDensity; LogUtil.i(screeninfo); tv_screen_info.setText(screeninfo); } /** * 测试sp,dip,px之间的关系、转换、运用 * */ private void testSpDpPx(){ /*获得*/ int heightDip = 40; //40dp高度 int heightSp = 17; //17sp float heightXmlPx = getResources().getDimension(R.dimen.test_height); //获得dimen定义高度px float txtXmlPx = getResources().getDimension(R.dimen.test_tv_size); //获得dimen定义文字大小px float txtSizeLayoutPx = tv_layout.getTextSize(); //获得控件的文字大小px //这个需要在onCreate做完之后获得,否则一直为0,怎么获得参考下面的,就不写了 //参考:http://blog.csdn.net/johnny901114/article/details/7839512 int heightLayoutPx = tv_layout.getHeight(); //获得控件的高度px, default = 0, error heightLayoutPx = tv_layout.getMeasuredHeight(); /*转换*/ LogUtil.i("convert : 40dip to "+ DisplayUtil.dip2px(instance,heightDip)+"px ,17sp to "+DisplayUtil.sp2px(instance,heightSp)+ "px\norg : heightXmlPx:"+heightXmlPx+"px, txtXmlPx="+txtXmlPx+ "px, heightLayoutPx="+heightLayoutPx+"px, txtSizeLayoutPx="+txtSizeLayoutPx+"px"); /*运用,动态布局中用得到*/ tv_code.setTextSize(heightSp); //这里直接设置需要的sp大小就行了,不需要转换 tv_code.setHeight(DisplayUtil.dip2px(instance,heightDip));//设置高度,需要px单位 //另外一种设置宽度,高度方法,比较常用:获得父控件的布局参数,然后设置进去 LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tv_code.getLayoutParams(); //params.weight=1; params.width = LinearLayout.LayoutParams.WRAP_CONTENT; params.height = DisplayUtil.dip2px(instance,heightDip); tv_code.setLayoutParams(params); }
3、工具类code
public class DisplayUtil { /** * 将px值转换为dip或dp值,保证尺寸大小不变 * * @param pxValue * (DisplayMetrics类中属性density) * @return */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * 将dip或dp值转换为px值,保证尺寸大小不变 * * @param dipValue * (DisplayMetrics类中属性density) * @return */ public static int dip2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } /** * 将dip或dp值转换为px值,保证尺寸大小不变 * * @param dpResid * xml中定义的dp属性 * getDimension() 返回float型px值 精确 getDimensionPixelOffset() 返回int型px值 直接把小数删除 getDimensionPixelSize() 返回int型px值 进行四舍五入 * @return */ public static int xmlDip2px(Context context, int dpResid) { return context.getResources().getDimensionPixelOffset(dpResid); } /** * 将px值转换为sp值,保证文字大小不变 * * @param pxValue * (DisplayMetrics类中属性scaledDensity) * @return */ public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * 将sp值转换为px值,保证文字大小不变 * * @param spValue * (DisplayMetrics类中属性scaledDensity) * @return */ public static int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } /** * 将sp值转换为px值,保证文字大小不变 * * @param spResid * xml中定义的sp属性 * getDimension() 返回float型px值 精确 getDimensionPixelOffset() 返回int型px值 直接把小数删除 getDimensionPixelSize() 返回int型px值 进行四舍五入 * @return */ public static int xmlSp2px(Context context, int spResid) { return context.getResources().getDimensionPixelOffset(spResid); }}
更多相关文章
- Android 改变当前屏幕背光亮度
- Android保持屏幕常亮的三种方法
- Android 手动设置屏幕方向后不能自动转屏问题
- android 监听手机屏幕唤醒和睡眠广播
- Android开发开发技巧之 EditText 属性大全