屏幕适配
屏幕尺寸
屏幕的对角线的长度,单位是英寸,英寸=2.54厘米
在适配中不是重点
屏幕分辨率
横纵向上像素点数
单位是px,1px=1个像素点
手机一般以 纵向像素*横向像素表示,如1920*1080
屏幕像素密度
每英寸上的像素点数
单位是dpi,"dot per inch"的缩写
屏幕像素密度与屏幕尺寸和屏幕分辨率相关
Nexus 5 屏幕 4.95 inch
1920*1080
DPI = 445
√(1920^2+1080^2) / 4.95 = 445
以上和硬件相关的
dpi 屏幕像素密度,和硬件相关的
px 像素
dp = dip
dip = dp
"density independent pixels" 即密度无关像素
以160dpi为基准,1dip = 1px
sp
scale-independent pixels
可以根据文字大小首选项进行缩放
12 14 18 22 推荐的
不要使用奇数 小数
mdpi 120-160dpi 启动图标为 48 * 48 px
hdpi 160-240dpi
xdpi 240-320dpi
xxdpi 320-480dpi
xxxdpi 480-640dpi
mdpi 2
hdpi 3
xdpi 4
xxdpi 6
xxxdpi 8
启动图标相关:
启动图标为 48*48dp
mdpi 48*48 px
hdpi 72*72 px
xdpi 96*96 px
xxdpi 144*144 px
xxxdpi 192*192 px
Android也支持低像素ldpi的屏幕,但无需为此费神,系统会自动将hdpi尺寸的图标缩小到1/2进行匹配。
<LinearLayout
android:id="@+id/activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/my_weight_1"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text="1"
android:layout_weight="0"/> >>> 保持比例的部分设置为0
<Button
android:id="@+id/my_weight_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="2"
android:layout_weight="1"/> >>> 拉伸的部分设置为1
<Button
android:id="@+id/my_weight_3"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text="3"
android:layout_weight="0"/> >>> 保持比例的部分设置为0
</LinearLayout>
竖屏效果:
横屏效果:
weight
计算出的宽度 = 原来宽度 + 剩余空间所占百分比宽度
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@id/linearLayout2">
<Button
android:id="@+id/my_weight_7"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="7"
android:layout_weight="1"/>
<Button
android:id="@+id/my_weight_8"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="8"
android:layout_weight="2"/>
</LinearLayout>
效果图:
设屏幕宽度为L
my_weight_7 button
2/3L = L + (L-2L) * 1/3
my_weight_8 button
1/3L = L + (L-2L) * 2/3
如果想按照自己分配的weight去显示
需要把相应的长度
layout_width,layout_height 写为 0dp
-sw411-xxhdpi 是如何计算出来的?
411 = 1080 * (160/420)
1080为(屏幕宽的分辨率)
160为固定值
420为DPI的值
dpi = 420 所以应选用 xxhpi, 如下:
hdpi 160-240dpi
xdpi 240-320dpi
xxdpi 320-480dpi
xxxdpi 480-640dpi
values-sw600dp-land 横向
values-sw600dp-port 纵向
.9.png
图片是可伸缩的
左边,上边的黑色点是拉伸点
拉伸比例是按照点数比例计算的
右边,下边是间隔区域,相似padding 属性
除了划线的部分,其余的为 padding
values-480*320可以以它为基准,相应把别的分辨率都换算出来
values-800*480
资源文件可以按照分辨率来
把相应的分辨率都写入进入
这样就能保持显示出来的效果大致相似
用px为单位
不建议用,只是一个思路
mipmap-hdpi
mipmap-mdpi
mipmap-xdpi
mipmap-xxdpi
用于放图标的
备用位图
Genymotion 超快的模拟器
目录:platform_development/samples/training/multiscreen/
下载地址:https://github.com/android/platform_developments