Android Settings中有修改Disaply size的界面,通过修改Display size,能够修改屏幕分辨率。
由于修改了屏幕分辨率,有可能导致同一界面在不同的分辨率下显示出错(内容显示不全,空间位置混乱等等)
可以通过Settings -> System ->Developer options -> Smallest width 查看具体dp 值
或者通过以下代码进行查看。
WindowManager wm = (WindowManager) this.getSystemService(this.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) dpi/160
int densityDpi = dm.densityDpi; // 屏幕密度dpi(120 / 160 / 240)
// 屏幕宽度算法:屏幕宽度(像素)/屏幕密度
int screenWidth = (int) (width / density); // 屏幕宽度(dp)
int screenHeight = (int) (height / density);// 屏幕高度(dp)
可以通过创建不同 values-swxxxdp layout-swxxxdp 来适配不同的情况。
在系统的独立像素密度大于设置的 xxx的值的时候使用。
昨天在check SoundRecoder app的发现源代码 添加了values-xxxhdpi/ 但是有没有其他的适配设置,导致录音界面进入多窗口后显示出错。
普及知识:
分辨率:长像素*宽像素, 横纵2个方向的像素点的数量,常见取值 480X800 ,320X480
设备尺寸: 对角线长度
px(像素):屏幕上的点。
in(英寸):长度单位。
mm(毫米):长度单位。
pt(磅):1/72英寸。
dp(与密度无关的像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。 px = dp * (一英寸中的像素(dpi)/160) (标准计算中dp按1 计算。得到px 与dp 的换算 px = dp(dpi/160)) 。dp是为了方便适配不同屏幕的单位,在不同屏幕密度下,1dp的物理长度也相同。 (我理解的是 dp :在160为标准的下,实际包含的像素个数。)
sw: 代表的是small width
dip:与dp相同,多用于android/ophone示例中。
dpi :dots per inch , 直接来说就是一英寸多少个点。常见取值 120,160,240。我一般称作像素密度,简称密度 。 (( 宽像素*长像素)/ 设备尺寸)
sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。