Android 不同的屏幕尺寸和密度

标签 android android-screen-support

问题一:我的应用程序有 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/

相关文章:

android - 从应用程序最小化状态启动主 Activity

android - 在eclipse for android中插入图片的位置

android - 在 Ubuntu 18.04 上 react 原生 Android 模拟器错误

android - 错误 :(3, 0) 原因:org/apache/commons/lang3/StringUtils

android - OpenGL - 多个设备上的相同尺寸

java - android.support.v4.app.FragmentPagerAdapter 不能应用于 android.app.FragmentManager

android - onTouch event.getX 或 Y 在不同屏幕尺寸上的一致性 - Android

android - 创建不同屏幕布局的最佳实践

android - 支持多屏幕的最佳方式? - 安卓

android 不同尺寸不工作