但根据要求,为了优化应用程序的使用,我应该使用单个XML布局来完成。
所以请您能否帮助我?我已经查阅了多个教程和链接,但无法找到一个最终解决方案。
可绘制资源:
对于图片,您需要根据屏幕分辨率管理不同的可绘制资源文件夹:
drawable-ldpi //240x320
drawable-mdpi //320x480
drawable-hdpi //480x800
drawable-xhdpi //720x1280
drawable-xxhdpi //1080X1920
drawable-xxxhdpi //1440X2560
drawable-tvdpi // nexus 7 etc
drawable-xlarge-xhdpi //tablet like nexus 10
尺寸: 如果您根据 UI 使用不同的静态尺寸,则必须将它们相对于其值定义为...文件夹。
不同智能手机分辨率的值文件夹:
values-ldpi\dimens.xml
values-mdpi\dimens.xml
values-hdpi\dimens.xml
values-xhdpi\dimens.xml
values-xxhdpi\dimens.xml
values-xxxhdpi\dimens.xml
注意:如果您使用sp/sip/dp/dip,那么这些值将根据设备的密度进行调整。 例如,假设您在mdpi(320X480)分辨率设备上为TextView设置了10sp。那么这个相同的值将自动适应其他分辨率。
mdpi(10sp==10px)
hdpi(15px)
xhdpi(20px)
xxhdpi(30px)
xxxhdpi(40px)
以下是一些常见的用于管理屏幕分辨率相关尺寸的文件夹。
不同屏幕使用不同的值文件夹:
values-sw720dp 10.1” tablet 1280x800 mdpi
values-sw600dp 7.0” tablet 1024x600 mdpi
values-sw480dp 5.4” 480x854 mdpi
values-sw480dp 5.1” 480x800 mdpi
values-xxxhdpi 1440X2560 xxxhdpi
values-xxhdpi 1080X1920 xxhdpi
values-xhdpi 4.7” 1280x720 xhdpi
values-xhdpi 4.65” 720x1280 xhdpi
values-hdpi 4.0” 480x800 hdpi
values-hdpi 3.7” 480x854 hdpi
values-mdpi 3.2” 320x480 mdpi
values-ldpi 3.4” 240x432 ldpi
values-ldpi 3.3” 240x400 ldpi
values-ldpi 2.7” 240x320 ldpi
要深入了解,请访问支持屏幕分辨率
res
文件夹中为所有设备创建三个不同的布局文件夹(Layouts Folder)
,并根据需要使用相应的尺寸。
通用布局文件夹(Generic Layout Folders)
res/layout-small
res/layout-normal
res/layout-large
res/layout-xlarge
完成普通/中等布局后,请按照以下步骤操作:
转换数值
0.75 - ldpi (small) //mdpi dimens *0.75
1.0 - mdpi (normal) //First create these dimensions
1.5 - hdpi (large) //mdpi dimens *1.5
2.0 - xhdpi (xLarge) //mdpi dimens *2.0
例如
android:layout_width="66dip" //in normal
android:layout_width="100dip"//in large 66*1.5=100(approx)
android:layout_width="52dip" //in small 66*0.75=52(approx)
新增了新的限定符:
在此处可阅读更多相关信息:https://developer.android.com/guide/practices/screens_support.html
希望这能对您有所帮助。
compile 'com.intuit.sdp:sdp-android:1.0.4'
您只需在build.gradle文件中添加依赖项即可完成。
您需要指定如下:
android:layout_height="@dimen/_10sdp"
通常情况下:
android:layout_height="@dimen/10dp"
如果你使用sp作为文本大小单位,使用dp作为其他尺寸单位,Android会根据设备的密度自动调整不同布局。如果你想要控制数值,可以将数值放在每个values文件夹中的dimens.xml文件中。不同密度设备内部的values文件夹如下:
values-ldpi\dimens.xml
values-mdpi\dimens.xml
values-hdpi\dimens.xml
values-xhdpi\dimens.xml
values-xxhdpi\dimens.xml
values-xxxhdpi\dimens.xml
这取决于你的代码
看看这些链接
1)https://developer.android.com/training/multiscreen/screensizes.html
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
有三种方法可以实现这个目标:
1)将您的图像和图标放入不同的drawable
文件夹,包括drawable-mdpi
,drawable-hdpi
,drawable-xhdpi
,drawable-xxhdpi
,drawable-xxxhdpi
,根据屏幕分辨率从特定文件夹访问图像。不要在所有地方应用固定值来缩放图像。 固定尺寸可能会因不同的设备而变化,并且图像看起来会被拉伸。 因此,请使用wrap_content
2)在不同的values
文件夹中的dimens.xml
中设置尺寸。
values-mdpi\dimens.xml
values-hdpi\dimens.xml
values-xhdpi\dimens.xml
values-xxhdpi\dimens.xml
values-xxxhdpi\dimens.xml
3) 使用 LinearLayout
并适当使用 android:layout_weight
。
如果您想使用单一布局,并且该布局应支持所有屏幕,如 ldpi、mdpi、hdpi、x-hdpi、xx-hdpi,则必须在布局中使用权重,以处理所有屏幕的屏幕大小。
以下是几件事情:
If you want to divide the space equally between Views with the same weight – set 0dp as Views’ width.
If you set View width to wrap_content – size of the Views will depend on weight and content inside each View.