Android 屏幕显示

一 、像素

Android 支持的像素单位有:px(像素)、in(英寸)、mm(毫米)、pt(磅1/72英寸)、 dp(与设备无关的显示单位)、 dip(就是dp)、 sp(用于设置字体的大小) .常用的有 px 、dp、 sp三种。

px 是手机屏幕上可显示的最小单位,与物理设备的显示屏无关。一般来说同样尺寸的屏幕 看起来越清晰,像素密度越高,以px计量的分辨率也越高。

dp 与物理设备无关,只与屏幕的尺寸有关。一般来说,同样尺寸的屏幕以dp计量的分辨率是一样的,无论这个手机是哪个厂家生产的,dp 大小都是一样的。

sp 的原理跟dp差不多,专门用于设置字体大小。手机在系统设置里可以调整字体的大小(小、普通、大、超大)。设置普通字体时,同数值dp和sp的文字看起来一样大。如果设置为大字体,用dp设置的文字大小没有变化,用sp设置的字体就会变大。 dp 和sp 之间的联系取决于具体设备上的像素密度,像素密度就是DisplayMetrics里的density 参数。当density = 1.0时,表示一个dp值对应一个sp值;当density = 1.5 时,表示两个dp值对应3个px值;当density = 2.0时,表示一个dp值对应2个px值;

public  class Utils
{
    /**
     * 根据手机分辨率从DP转成PX
     * @param context
     * @param dpValue
     * @return
     */
    public static int dip2px(Context context, float dpValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
    /**
     * 根据手机的分辨率PX(像素)转成DP
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2dip(Context context, float pxValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * 将sp值转换为px值,保证文字大小不变
     * @param spValue
     * @return
     */
    public static int sp2px(Context context, float spValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }


    /**
     * 将px值转换为sp值,保证文字大小不变
     * @param pxValue
     * @return
     */

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

}

在 XML布局文件中,为了让不同的设备屏幕拥有统一的显示效果,除了sp用于设置文字大小外,其余要用大小的地方都用sp。在代码中情况又有所不同,Android用于设置大小的函数都是以px为单位。无论是LayoutParams 里的width和height ,还是setMargins 和setPadding ,参数单位都是px ,要想在代码中使用dp设置布局大小或间距,得先把dp值转换成px值 代码如下:
 
int dip_10 = Utils.dip2px(this,10L);
TextView tv_padding = (TextView)findViewById(R.id.tv_padding);
tv_padding.setPadding(dip_10,dip_10,dip_10,dip_10);
二、颜色
在Android 中颜色由透明度alpha 和RGB 三原色定义,有八位16进制数与六位十六进制数两种编码。例如八位编码 FFEEDDCC ,FF表示透明度,EE表示红色的浓度,CC表示蓝色的浓度,CC表示绿色的浓度。
tv_padding.setBackgroundColor(0x00ff00);

tv_padding.setBackgroundColor(0xff00ff00);
//设置系统已定义的颜色
tv_padding.setBackgroundColor(Color.BLACK);
六位十六进制编码有两种情况 ,在XML文件中默认不透明(FF),在代码中默认透明(00)

在布局文件中设置颜色需要在色值前面加“#” 在代码中0x;

使用colors.xml中定义的颜色
res/values 目录 下有个colors.xml 文件,是颜色常量的定义文件。如果要在布局文件中使用XML颜色常量,可引用“@color/常量名” ;如果要在代码中使用XML颜色常量可通过代码获取:getResource().getColor(R.color.常量名)


三、屏幕分辨率

 public void getAndroiodScreenProperty() {
        WindowManager wm = (WindowManager)    this.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics dm = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(dm);
        int width = dm.widthPixels;         // 屏幕宽度(像素)
        int height = dm.heightPixels;       // 屏幕高度(像素)
        float density = dm.density;         // 屏幕密度(0.75 / 1.0 / 1.5)
        int densityDpi = dm.densityDpi;     // 屏幕密度dpi(120 / 160 / 240)
        // 屏幕宽度算法:屏幕宽度(像素)/屏幕密度
        int screenWidth = (int) (width / density);  // 屏幕宽度(dp)
        int screenHeight = (int) (height / density);// 屏幕高度(dp)


        Log.d("h_bl", "屏幕宽度(像素):" + width);
        Log.d("h_bl", "屏幕高度(像素):" + height);
        Log.d("h_bl", "屏幕密度(0.75 / 1.0 / 1.5):" + density);
        Log.d("h_bl", "屏幕密度dpi(120 / 160 / 240):" + densityDpi);
        Log.d("h_bl", "屏幕宽度(dp):" + screenWidth);
        Log.d("h_bl", "屏幕高度(dp):" + screenHeight);
    }

 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值