一、参考

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、截图


Android 设备屏幕信息(dip,sp,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);    }}

更多相关文章

  1. Android 改变当前屏幕背光亮度
  2. Android保持屏幕常亮的三种方法
  3. Android 手动设置屏幕方向后不能自动转屏问题
  4. android 监听手机屏幕唤醒和睡眠广播
  5. Android开发开发技巧之 EditText 属性大全

随机推荐

  1. 状态栏获取信息
  2. Android(安卓)ExpandableListActivity
  3. Android获取当前时间与星期几
  4. tabhost置底
  5. Android(安卓)周报
  6. Android(安卓)ConstraintLayout Toolbar
  7. Android练习之BitmapFactory.decodeFile
  8. android 游戏 让人物动起来
  9. Android加载大量文字时关键字变色
  10. 友盟统计配置