Android屏幕分辨率,颜色、像素的使用(技巧)(必看)

来源:互联网 发布:c语言的就业前景 编辑:程序博客网 时间:2024/06/05 10:56

一、颜色

Android中颜色是由透明度(alpha)和红绿蓝(RGB)定义的,两种编码方式:
1、八位十六进制数,例如FFEEDDCC,FF代表透明度(完全不透明),EE代表红色(值越大红色越深),DD代表绿色,CC代表蓝色;
2、六位十六进制数,同上;
注意:六位编码在XML中默认不透明(FF),在代码中默认透明(00);在代码中设置颜色,可以直接填八位的十六进制数值,如setTextColor(0xff00ff00);,也可以通过Color.rgb(int red, int green, int blue)和Color.argb(int alpha, int red, int green, int blue)来指定颜色。
如果在代码中使用colors.xml中设置的颜色,可按如下方式获取 setTextColor(getResources().getColor(R.color.black));

二、像素

1、Android支持如下像素单位:px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(与设备无关的显示单位)、dip(就是dp)、sp(用于设置字体大小),其中常用的就是px、dp和sp三种。
2、1) px时android屏幕上可显示的最小单位,此单位与物理显示屏有关,同样尺寸手机,显示越清晰,其像素密度越高,以px计量的分辨率就越高。

2) dp与物理设备无关,只与屏幕的尺寸有关,同样尺寸的屏幕,以dp计量的分辨率都是一样的,即同样尺寸的屏幕dp是相同的。

3) sp,用来描述字体大小,Android手机系统设置里面有设置字体大小的功能(小,普通,大,超大),当设置为sp时该功能是有效的,而用dp来设置字体的话,该设置是无效的。

4) dp与px的转换:dp与px之间的联系,取决于具体设备上的像素密度;像素密度就是DisplayMetrics中的density参数;当density为1.0时,px与dp相同;当density为1.5时,2dp = 3px;
二者之间的转换如下:

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

3、dp与px的使用场景(必看)
在xml布局文件中,因为与设备无关,所以全部使用dp或sp,而在代码中,情况又不同,Android中用于设置大小的函数全部以px为单位(不管是layoutParam中的width、Height,还是setPadding,setMargin),所以想使用dp时,有必要将其转换为对应的px。

int dip_10 = Utils.dip2px(mContext, 10L);  //10L代表dp的值LinearLayout.LayoutParams titleParams = new LinearLayout.LayoutParams(          LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);  titleParams.setMargins(dip_10, dip_10, dip_10, dip_10);

三、屏幕分辨率

获取屏幕分辨率的终极方式(避免了fragment使用getWindowManager方法的难处,)

public static Point getSizeNew(Context ctx) {      WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);      DisplayMetrics dm = new DisplayMetrics();      wm.getDefaultDisplay().getMetrics(dm);      Point size = new Point();      size.x = dm.widthPixels;      size.y = dm.heightPixels;      return size;  }
1 0
原创粉丝点击