author:Tzy
dp=设备独立像素=dip
px=desity*dp
density=dpi/160
dpi=屏幕对角线像素/屏幕尺寸
以现在市面上最常见的设备类型为例,分辨率1080*1920,尺寸5.5,计算出来:
density≈2.5
设备实际宽度(单位dp)为:
1080/2.5≈430dp
假设设计图宽度为360dp,那屏幕就比设计图要宽,如果设备屏幕宽度小于360dp,还会出现显示不全的情况,无法做到不同设备显示效果一致.
dp/sp
自适应布局:
最小宽度(Smallest-width)限定符
设计图为480*320分辨率,新建res/values-480x320目录,新建dimens.xml:
<resources>
<dimen name="x1">1.0px</dimen>
...
<dimen name="x320">320.0px</dimen>
<dimen name="y1">1.0px</dimen>
...
<dimen name="y480">480.0px</dimen>
</resources>
适配1080*1920分辨率:
xScale=1080/320=3.375;
yScale=1920/480=4;
新建res/values-1920x1080目录,新建dimens.xml:
<resources>
<dimen name="x1">3.375px</dimen> //xScale*x1
...
<dimen name="x320">1080.0px</dimen> //xScale*x320
<dimen name="y1">4.0px</dimen> //xScale*y1
...
<dimen name="y480">1920.0px</dimen> //xScale*y480
</resources>
在布局中使用:
<TextView
android:layout_width="@dimen/x100"
android:layout_height="@dimen/y30"/>
需要精准匹配分辨率,产生额外文件夹.
来源于方案通过宽高限定符,与其原理类似,弥补了其需要精准匹配的缺陷,因为系统会根据最小宽度限定符去选择最接近的values目录.
设计图为480*320分辨率,新建res/values-sw320dp,新建dimens.xml:
<resources>
<dimen name="s1">1dp</dimen>
...
<dimen name="s320">320dp</dimen>
</resources>
适配屏幕宽度为360dp设备:
scale=360/320=1.125;
新建res/values-sw360dp目录,新建dimens.xml:
<resources>
<dimen name="s1">1.125dp</dimen> //scale*1
...
<dimen name="s320">360dp</dimen> //scale*360
</resources>
在布局中使用:
<TextView
android:layout_width="@dimen/s100"
android:layout_height="@dimen/s30"/>
产生额外文件夹.
根据设计图宽度(单位dp)自定义density.
density=设备宽度(单位px)/设计图宽度(单位dp)
设计图宽度为360dp:
sizeInPx=360;
final DisplayMetrics systemDm = Resources.getSystem().getDisplayMetrics();
final DisplayMetrics appDm = application.getResources().getDisplayMetrics();
final DisplayMetrics activityDm = activity.getResources().getDisplayMetrics();
activityDm.density = activityDm.widthPixels / (float) sizeInPx;
activityDm.scaledDensity = activityDm.density * (systemDm.scaledDensity / systemDm.density);
activityDm.densityDpi = (int) (160 * activityDm.density);
appDm.density = activityDm.density;
appDm.scaledDensity = activityDm.scaledDensity;
appDm.densityDpi = activityDm.densityDpi;
本文地址:https://blog.csdn.net/tangzeyu7/article/details/107509990
如对本文有疑问, 点击进行留言回复!!
LongClick原理、上下文菜单原理、EditText长按弹窗原理、WebView长按弹窗自定义、修复WebView全选重复bug ———————————————— 版权声明:本文为CSDN博主「
JobScheduler 实现 特定时间,特定条件(系统空闲,电池电量,磁盘空间 ……)下执行任务
网友评论