问题一:我的应用程序有 18-20 个 xml 布局文件。我怎样才能让应用程序在所有安卓手机上都一样。我读了很多答案,为尺寸和密度创建了不同的值文件夹,但是我怎样才能实现这两个目标,比如某些手机具有不同的密度但屏幕尺寸相同。并为每个布局 xml 文件创建 7-8 个文件,我认为这不太好。
请具体不要回复其他问题的链接或android开发者网站url。我已经阅读了堆栈溢出中的所有 android 文档和答案。
问题 2:我在两个 Activity 中在运行时创建按钮。我已经根据密度创建了按钮,但是如果尺寸很大,那么尺寸会怎样呢?剩下很多空白区域。
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 150,r.getDisplayMetrics()));
button.setWidth(px);
button.setHeight(px);
最佳答案
众所周知,不同的手机有不同的屏幕。几乎所有的安卓手机都是 16 x 9 的比例。 (除了 wonderfull s8 ...)。
现在我曾经遇到过有关设计的问题,但我找到了一种方法,使设计在每个 16:9 甚至 21.5:9 屏幕上看起来 100% 相同。
我主要做的是在 xxxhdpi Canvas 上用 photoshop 设计:
2560 x 1440,密度为 577。
我渲染我的按钮并使用批处理转换器将每个按钮(可绘制)转换为 5 种不同的尺寸:
xxxhdpi = 100 % ( the size of the original )
xxhdpi = 75 %
xhdpi = 50 %
hdpi = 37.5 %
mdpi = 25 %.
然后我在我的 android 项目中放置了 5 个不同的文件夹,命名为:
"drawable-xxxhdpi"
"drawable-xxhdpi"
"drawable-xhdpi"
"drawable-hdpi"
"drawable-mdpi"
我将可绘制对象插入正确的文件夹并开始设计。
我总是尝试使用线性布局,然后使用 android:layout_weights 来确定屏幕上的位置。
权重像百分比一样工作,所以说我在我的根布局中放置了两个线性布局,两者的权重都恰好为 50 。它们恰好占满每台设备屏幕的一半。
只要您可以使用线性布局,这对所有设备都适用。
如果我需要使用框架布局,那么我会进入我的类的代码并初始化每个不能有权重的元素。尤其是当涉及到填充时:
我为问题中的元素设置了一个新的 linearlayout.layoutparams for witdh and height go "resources.dimensions.displaymetrics.height/width pixels and divide those with a hardcoded number.
由于显示指标对应于实际手机,因此即使使用框架布局,除法也将以百分比结尾。边距或填充也是如此。
结果是完美的。无论使用什么手机,当它是 16:9 比例时,设计看起来总是一样的。即使在 ScrollView 、相对布局等中也是如此。
对于具有不同宽高比的手机,我通过除以高像素/宽像素来设置比例,这使得设计在这些屏幕上同样适用。
结果以大量工作结束,但设计完美。我拒绝在我的 axml 中使用“dpi”,因为它们确实有效,但在每部手机上看起来并不总是一样。
我希望这会是你的答案。 简而言之: 在 photoshop 中设计,渲染一个按钮,批量转换,放在 xml 上,你就可以了。
关于Android 不同的屏幕尺寸和密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48188326/