user-interface - 是否有必要为应用程序创建不同的屏幕尺寸和密度 xml?最好的方法
问题描述
只是一个直截了当的问题。我试图在这里做出最好的选择,对于像我这样的“半初学者”来说,信息太多了。
好吧,在这一点上,我正在尝试为我的布局使用屏幕尺寸值(activity_main.xml (normal, large, small))
和不同的密度(xhdpi
, xxhdpi
, mhdpi
),如果我自己可以这么说,那就是一团糟。我是否必须创建所有可能的选项来支持所有屏幕尺寸和密度?还是我在这里做错了什么?最好的方法是什么?我的布局现在是activity_main(normal_land_xxhdpi)
,我对此表示严重怀疑。
当然,我正在使用最新版本的 android studio。我的应用程序是一个带有按钮、文本视图和其他的单一活动。没有任何碎片或意图,因此我认为这必须是一件容易的事,但对我来说不是。
希望大家能帮忙。我认为我不需要在此处放置任何代码,但如果需要,我可以添加它。
解决方案
如果您想为每台设备制作响应式 UI,您需要先了解一些内容:
-PX、DP的区别:
https://developer.android.com/training/multiscreen/screendensities
在这里你可以理解dp是android用来计算多少像素的标准度量,比如说一条线,应该保持不同屏幕尺寸和不同密度之间的比例。
-分辨率、密度和比率:
分辨率是屏幕有多少像素超过高度和宽度。此像素可以更小或更大,例如,如果您有一个 10x10 像素的屏幕 A,其像素也比其他 10 x 10 像素的屏幕 B 小两倍,即使两者都有 10,A 也比 B 小两倍x 10 像素。
因此,存在含义Density,即您的屏幕每英寸有多少像素,因此您可以测量屏幕的质量,其中大多数每英寸像素 (ppi) 更好。
比例告诉你有多少像素是高度和宽度,例如 1000 x 2000 像素的屏幕比例是 1:2,1920 x 1080 的全高清屏幕是 16:9(每 9 个像素高度为 16 个像素像素宽度)。1:1 的比例是方形屏幕。
-标准设备的分辨率
您可以在...上找到最常见的测量值
https://material.io/resources/devices/
制作 UI 时,您使用 DP 测量值。您会意识到,即使屏幕之间的分辨率不同,DP 也是相同的,因为它们具有不同的密度。
现在,正确的方法是使用约束布局,使用 dp 措施将您的视图放在屏幕上,使用正确的约束,内容将适应其他屏幕尺寸
无论如何,在某些情况下,您需要制作额外的 XML:
-不同的方向 -不同的比例 -不同的 DP 分辨率(不是 px)
对于每项活动,您都需要提供纵向和横向设计。如果其他设备的比例不同,可能由于屏幕比例不一样,您需要调整高度或宽度。最后,即使比例相同,DP 分辨率也可能不同,也许你设计了一个 640x360dp 的活动,而其他设备有 853x480dp,这意味着你会有更多的垂直空间。
你可以在这里阅读更多:
https://developer.android.com/training/multiscreen/screensizes
并学习如何正确使用 constraintLayout:
https://developer.android.com/training/constraint-layout?hl=es-419
注意:也许对于每个活动来说似乎都需要做很多工作,但是您制作了第一个设计,然后您只需将设计复制到带有一些限定符的其他 xml 并更改 dp 值以根据需要调整视图(无需制作从头开始),这真的更快。
推荐阅读
- java - Servlet 上下文路径为空
- ios - TableView Xcode10/Swift 4 中的标签被截断
- c++ - 使用 unix 下载 html 文件
- c# - Find a common script that is attached to multiple gameObjects?
- html - 将滚动条保持在 div 的底部,包括 v-for?
- c# - 我正在尝试检测系统中是否安装了 SQL Server Compact Edition
- python - serialize django model queryset with serializers.serialize() function
- c - 尝试使用 fread 和 fwrite 复制文件时出现问题
- symfony - 在 symfony 项目中导入字体
- html - Transit Options 排除 subaway 不工作的 Google Maps API