目录
在安卓3.2之下的适配 限定符
为了适配不同屏幕大小的android手机或android平板,有时候就需要利用限定符来为不同的屏幕设定不同的布局文件。
android中一些常用的限定符如下所示:
屏幕特性 | 限定符 | 描述 |
---|---|---|
屏幕尺寸 | small | 小屏幕 |
normal | 基准屏幕 | |
large | 大屏幕 | |
xlarge | 超大屏幕 | |
屏幕密度 | ldpi | <=120dpi |
mdpi | <= 160dpi | |
hdpi | <= 240dpi | |
xhdpi | <= 320dpi | |
xxhdpi | <= 480dpi | |
xxhdpi | <= 640dpi(只用来存放icon) | |
nodpi | 与屏幕密度无关的资源.系统不会针对屏幕密度对其中资源进行压缩或者拉伸 | |
tvdpi | 介于mdpi与hdpi之间,特定针对213dpi,专门为电视准备的,手机应用开发不需要关心这个密度值. | |
屏幕方向 | land | 横向 |
port | 纵向 | |
屏幕宽高比 | long | 比标准屏幕宽高比明显的高或者宽的这样屏幕 |
notlong | 和标准屏幕配置一样的屏幕宽高比 |
例如:
res/layout/my_layout.xml // layout for normal screen size ("default")
res/layout-large/my_layout.xml // layout for large screen size
res/layout-xlarge/my_layout.xml // layout for extra-large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientation
res/drawable-mdpi/graphic.png // bitmap for medium-density
res/drawable-hdpi/graphic.png // bitmap for high-density
res/drawable-xhdpi/graphic.png // bitmap for extra-high-density
res/drawable-xxhdpi/graphic.png // bitmap for extra-extra-high-density
res/mipmap-mdpi/my_icon.png // launcher icon for medium-density
res/mipmap-hdpi/my_icon.png // launcher icon for high-density
res/mipmap-xhdpi/my_icon.png // launcher icon for extra-high-density
res/mipmap-xxhdpi/my_icon.png // launcher icon for extra-extra-high-density
res/mipmap-xxxhdpi/my_icon.png // launcher icon for extra-extra-extra-high-density
在一般情况下在layout文件夹下是默认的布局文件,而在大屏幕设备上,这个布局文件可能就不怎么适用了。
因此,我们可以利用限定符large,在res目录下新建一个layout_large文件夹,再新建一个同名的布局文件。
这样,当程序运行在了大屏幕设备上时,android就会自动地加载layout_large文件夹下的布局文件,其他情况下还是会加载layout文件下的布局文件。
这样,当程序运行在不同屏幕大小的手机上时都可以有比较完美的布局了。
有时候我们也不希望由系统来为我们来判断加载哪个布局,而是希望能够为之设定一个临界值,当屏幕宽度小于临界值时,加载默认布局,当大于时则加载另一个专门准备的布局文件。
可以在res目录下新建一个文件夹,命名为layout_ sw650dp,再将专门准备的同名布局文件放置在其中。
这样,当程序运行在屏幕大于650dp的设备上时,就会加载layout_ sw650dp文件夹下的布局文件了
android3.2之后引入的,目前推荐使用的;
屏幕特性 | 限定符 | 描述 |
---|---|---|
最小宽度限定符 | sw<N>dp 例如sw600dp, sw720dp | 屏幕的最小尺寸,就是屏幕可用区域的最小尺寸,是指屏幕可用高度或宽度的最小值(你可以默认是屏幕的最小宽度).你能用这个限定符确保,无论屏幕方向如何,这个限定符修饰下的布局需要的屏幕最小尺寸是Ndp. 例如,如果你的布局在运行时需要的最小屏幕宽度是600dp,则你可以利用这个限定符创建布局资源目录res/layout-sw600dp.只有当屏幕的最小宽度或最小高度是600dp时,系统才会使用这些布局文件或者资源文件.最小屏幕宽度是固定设备的特有屏幕尺寸,当屏幕方向发生变化时,设备的最小宽度值不变. 设备的最小宽度值要考虑屏幕的尺寸和系统UI.例如,如果在屏幕上有一些系统持久化UI元素,则系统的最小宽度值要比实现的屏幕尺寸小一些,因为这些系统的UI元素你的应用是无法使用到的. 当你使用之前的广义限定符是,你可以定义连续的一系列限定符.用最小宽度来决定广义屏幕尺寸是有意义的,是因为宽度是影响你UI设计的关键因素.UI在竖直方向上会经常滚动,但是在水平方向上往往是固定的布局.可见不论是适配手机或者平板,宽度往往都是布局的关键因素.因此,你需要关心你手机上的最小宽度值. |
屏幕可用宽度 | w<N>dp Examples: w720p w1024p | 指定资源使用时需要的最小宽度.当屏幕方向发生变化时,系统会调整这个值,使其始终为你UI显示的宽度. 这个属性经常被用来判断当前是否需要显示多屏布局,因为哪怕用户当前正在使用平板,你也可能不希望用户在平板竖屏时显示多个屏幕的布局样式.这时,你就可以使用这个限定符来标明你布局需要的最小宽度 |
屏幕可用高度 | h<N>dp Examples: h720dp h1024dp etc. | 标明资源使用时需要的最小高度.当屏幕发生旋转时,系统会自动选择当前大的一方作为高度值.大部分应用很少需要这个限定符,因此不做过多讲解 |
在不考虑屏幕方向只关注布局最小空间的前提下,使用sw<N>的方式更加简单.
例如:
res/layout/main_activity.xml #手机布局
res/layout-sw600dp/main_activity.xml #7寸平板布局
res/layout-sw720dp/main_activity.xml #10寸平板布局
补充:
设备宽度的dp计算方法:
dp = 屏幕像素宽度/(屏幕像素密度/160) 160是基准屏幕像素密度 这个用来计算以上的sw后面的数值
通用公式:
dp = px/(dpi/160)
px = dp*(dpi/160)
参考链接:https://blog.csdn.net/wzy_1988/article/details/52932875