android屏幕显示(像素、颜色、分辨率)

一、像素

Android支持的像素显示单位有px像素、in英寸、mm毫米、pt磅(1/72英寸)、dp(与设备无关的显示单位,也写作dip)、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值;

//根据手机的分辨率从dp转换成px
public static int dip2px(Context context, float dpValue) {
    //获取当前手机的像素密度
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);//四舍五入取整
    }

//根据手机的分辨率从px转换成dp
    public static int px2dip(Context context, float pxValue) {
        //获取当前手机的像素密度
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);//四舍五入取整
    }

在 XML布局文件中,为了让不同的设备屏幕拥有统一的显示效果,除了sp用于设置文字大小外,其余要用大小的地方都用sp。在代码中情况又有所不同,Android用于设置大小的函数都是以px为单位。无论是LayoutParams 里的width和height ,还是setMargins 和setPadding ,参数单位都是px ,要想在代码中使用dp设置布局大小或间距,得先把dp值转换成px值。

二、颜色

在Android 中颜色由透明度alpha 和RGB 三原色定义,有八位16进制数与六位十六进制数两种编码。例如八位编码 FFEEDDCC ,FF表示透明度,EE表示红色的浓度,CC表示蓝色的浓度,CC表示绿色的浓度。透明度为FF表示完全不透明,为00表示完全透明。RGB的数值越大颜色浓度越浓也就越亮,数值越小颜色越暗淡。亮到极致就是白色,暗到极致就是黑色。
六位十六进制编码有两种情况 ,在XML文件中默认不透明(FF),在代码中默认透明(00),透明就表示看不到,因此一般在代码中不使用六位编码。

tv_padding.setBackgroundColor(0x00ff00);//设置背景为透明绿色
tv_padding.setBackgroundColor(0xff00ff00);//设置背景为不透明绿色
//设置系统已定义的颜色,可以使用下表的颜色
tv_padding.setBackgroundColor(Color.BLACK);

安卓系统已经定义好的颜色常量:

在这里插入图片描述


在布局文件中设置颜色需要在色值前面加“#” 在代码中0x;
Color.rgb(int red,int green,int blue)
Color.argb(int alpha,int red,int green,int blue)
这两种方法第一个是只要红绿蓝三色,第二个是带着透明度。每个参数都是0-255之间的数字。

也可以在res/values目录下的color.xml中定义的颜色,在布局中使用 @color/常量名,在java代码中使用 getResources().getColor(R.color.常量名)

三、屏幕分辨率
在Android中需要获取手机的屏幕分辨率,然后动态调整界面上的布局。在代码中获得分辨率就是想办法获得DisplayMetrics对象,然后从该对象中获得宽度,高度,像素密度等信息。DisplayMetrics类常用的属性有以下三个:

  • widthPixels:以px为单位的宽度值
  • HeightPixels:以px为单位的高度值
  • density:像素密度,即一个dp单位包含多少个px单位
 public void getAndroiodScreenProperty() {
     //从系统服务中获取窗口管理器
        WindowManager wm = (WindowManager)this.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics dm = new DisplayMetrics();
     //从默认显示器中获取显示参数保存到dm对象中
        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)
}


————————————————
原文链接:https://blog.csdn.net/pky86676022/article/details/127733477

猜你喜欢

转载自blog.csdn.net/weixin_42602900/article/details/129661884