Android不同的屏幕大小和密度

Android不同的屏幕大小和密度,android,android-screen-support,Android,Android Screen Support,问题一:我的应用程序有18-20个xml布局文件。如何在所有安卓手机上使用相同的应用程序。我读了很多答案,为大小和密度创建了不同的价值文件夹,但我如何实现这两个目标,比如一些手机的密度不同,但屏幕大小相同。我认为为每个布局xml文件创建7-8个文件并不好 请具体不要回复其他问题或android开发者网站url的链接。我已经在stack overflow中阅读了所有android文档和答案 问题2:在两个活动中,我在运行时创建按钮。我已经根据密度创建了按钮,但大小如何?如果大小较大,则会留下许多空

问题一:我的应用程序有18-20个xml布局文件。如何在所有安卓手机上使用相同的应用程序。我读了很多答案,为大小和密度创建了不同的价值文件夹,但我如何实现这两个目标,比如一些手机的密度不同,但屏幕大小相同。我认为为每个布局xml文件创建7-8个文件并不好

请具体不要回复其他问题或android开发者网站url的链接。我已经在stack overflow中阅读了所有android文档和答案

问题2:在两个活动中,我在运行时创建按钮。我已经根据密度创建了按钮,但大小如何?如果大小较大,则会留下许多空白

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


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

众所周知,不同的手机有不同的屏幕。几乎所有的安卓手机都是16乘9的比例。(除了神奇的s8…)

现在我经常遇到设计方面的问题,但我找到了一种方法,使设计在每16:9甚至21.5:9屏幕上看起来100%相同

我基本上是在xxxhdpi画布上的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\u权重来确定屏幕上的位置

权重的作用类似于百分比,所以我在根布局中设置了两个线性布局,两个布局的权重正好为50。在每台设备上,它们正好占据了屏幕的一半

只要您可以使用线性布局,这对所有设备都非常有效

如果我需要使用framelayout,那么我将进入我的类的代码并初始化每个不能有权重的元素。特别是当涉及到填充时:

我为witdh和height go“resources.dimensions.displaymetrics.height/width pixels”中的问题中的元素设置了一个新的linearlayout.layoutparams,并用一个硬编码的数字对其进行分割

由于显示指标与实际手机相对应,即使使用了帧布局,划分也将以百分比结束。边距或填充也是如此

结果是完美的。无论使用什么手机,当比例为16:9时,设计将始终保持不变。即使在滚动视图、相对布局等方面也是如此

对于具有不同纵横比的手机,我通过除以hightpixels/widthpixels来设置纵横比,这使得设计在这些屏幕上也同样有效

我拒绝在我的AXML中使用“dpi”,因为它们确实可以工作,但在每部手机上看起来并不总是一样的

我希望这会是你的答案。 简言之:
在photoshop中进行设计,渲染一个按钮,批量转换它,使用xml,你就可以了。

使用动态设计…这样你就不需要为Tab或任何其他基于分辨率的设备制作任何单独的xml。请参考此@HardyAndroid是的,我早上读过此内容,但如果我在play store上上传我的应用程序,会有任何问题吗?@nihal\u softy谢谢先生,这意味着我应该计算密度和屏幕大小,并根据手机的密度和大小进行测试?@Laksh很抱歉这个愚蠢的问题,但我可以知道你是新手还是只完成了几个应用程序?是的,动态设计可能会占用你一些时间来理解。无论如何,如果你想使用,那么你可以使用,但它不是这不是一个正确的解决方案。如果您遇到任何问题,请告诉我。感谢buddy提供的非常详细和简单的解释。但是我的应用程序有不同的印地语和英语语言支持,因此在photoshop中创建按钮会很困难。在其他活动中,我会根据我从数据库中获得的列表创建按钮,因此它是di困难。“我为witdh和height go”参考资料中的元素设置了一个新的linearlayout.layoutparams,并用一个硬编码的数字除以这些像素。”硬编码的值是多少?im测试的手机宽度高度?是的,没问题,我以前也遇到过同样的问题。请随意投票并接受我的答案。谢谢。对不起,我不需要名誉。但是谢谢你的解释,请回答我的一些问题,你能分享我应该使用px而不是dp的代码吗?我真的不明白你在那里想做什么,但是当我在运行时设置了一个按钮,并且没有设置背景图像时,我会设置它(来自可绘制的文件夹)始终使用Resource.DisplayMetrix.HeightPixels/和Widthpixels设置大小。永远不要使用px。@innomotionmedia以不同分辨率存储5种类型的相同图像不是一个好方法。这将增加apk大小。更好的方法是只在xhdpi中存储高质量的图像,并使用动态设计。只有一个图像适合整个项目。。我将仅使用5个不同的图像作为mipmap中的应用图标。。