Android 不同的屏幕尺寸和密度

Android Different Screen Size and Density

问题一: 我的应用程序有 18-20 xml 个布局文件。我怎样才能使所有 android phone 上的应用程序相同?我阅读了很多为尺寸和密度创建不同值文件夹的答案,但我如何才能实现这两个目标,比如一些 phone 具有不同的密度但屏幕尺寸相同。并为每个布局创建 7-8 个文件 xml 文件我认为不会很好。

请具体说明不要回复其他问题的链接或android开发者网站url。我已阅读堆栈溢出中的所有 android 文档和答案。

问题 2:在两个活动中,我在 运行 时间创建了按钮。我已经根据密度创建了按钮,但是如果尺寸很大,尺寸会怎样呢?剩下很多空白的白色 space。

Resources r = getResources();
            int px = Math.round(TypedValue.applyDimension(
                    TypedValue.COMPLEX_UNIT_DIP, 150,r.getDisplayMetrics()));


            button.setWidth(px);   
            button.setHeight(px);  

众所周知,不同的phone有不同的屏幕。几乎所有 android phone 都是 16 x 9 的比例。 (除了 wonderfull s8 ...)。

现在我曾经 运行 解决有关设计的问题,但我找到了一种方法让设计在每个 16:9 甚至 21.5:9 屏幕上看起来 100% 相同。

我主要做的是在 xxxhdpi 上用 photoshop 设计 canvas:

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 。它们正好占满每台设备屏幕的一半。

只要您可以使用线性布局,这对所有设备都适用。

如果我需要使用框架布局,我会进入 class 的代码并初始化每个不能有权重的元素。特别是当涉及到填充时:

我为 witdh 和 height go "resources.dimensions.displaymetrics.height / width pixels and divide those with a hardcoded pixels and divide those with a hardcoded number.linearlayout.layoutparams 我为问题中的元素设置了一个新的 linearlayout.layoutparams。

由于显示指标对应于实际 phone,即使使用框架布局,划分也将以百分比结束。边距或填充也是如此。

结果完美无缺。无论使用什么 phone,当它是 16:9 比例时,设计看起来总是一样的。即使在滚动视图、相对布局等中也是如此。

对于具有不同宽高比的 phone,我通过除以高像素/宽像素来设置比率,这使得设计在这些屏幕上同样有效。

结果是工作量大但设计完美。我拒绝在我的 axml 中使用 "dpi",因为它们确实有效,但在每个 phone.

上看起来并不总是一样

我希望这会成为您的答案。 简而言之: 在 photoshop 中设计,渲染一个按钮,批量转换,放在 xml 上就可以了。