支持多种屏幕尺寸 – Android

我将在Android中开发新的应用程序。 此应用程序应仅以纵向(即使是平板电脑)工作。 在手机和平​​板电脑上,UI和布局设计也应该类似。 我们无法改变平板电脑的布局设计,因为它有很大的使用面积。 我们必须拉伸所有图像以匹配手机。 我们可以使用九个补丁。 但我对在多个drawable中使用图像有点困惑。

根据我的分析(可能是错误的…… :))屏幕分为密度和大小。 我们可以使用3:4:6:8的缩放比例。 但这个比例是基于密度的。 但在我的情况下,我必须拉伸整个用户界面来填充平板电脑屏幕。

那么什么是可以用于这样的应用程序的drawables,它可以支持多个设备。 我们必须设计哪些屏幕尺寸。

这个应用程序需要近100个布局。 因此,我计划保持单一布局,并使用每个布局的重量而不是使用尺寸来设计布局。

此外,如果我使用多个APK来支持不同的屏幕大小,那么用于支持的绘图是什么。小和正常2.大3. Xlarge

我刚做了类似的事情。 要在不创建新布局的情况下拉伸应用程序,我使用了XML中设置的维度

res/values/dimensions.xml res/values-sw600dp/dimensions.xml -> 7+ inches res/values-sw720dp/dimensions.xml -> 10+ inches 

维度是资源文件:

 11dp 

您可以在600和720文件中将尺寸增加约30%。 然后在你的布局中简单地使用@dimen/default_padding ,它将被缩放

关于图像,要么确保所有资产都具有所有密度,要么将固定尺寸设置为ImageView和适当的scaleType

首先,您不希望创建多个APK来支持多个屏幕密度。 Android提供了在一个构建中支持所有内容所需的所有框架,您只需要创建具有所需密度的正确资源层次结构drawable。

那么你究竟需要什么……基于你的问题,如下:

  • 纵向模式 :您可以使用以下命令在AndroidManifest文件中声明的每个Activity中指定此项:

      ...  

    注意:根据Android文档 ,如果您的目标API> = 13,并且您使用android:configChanges属性,则还应使用android:screenSize属性来帮助指定大小更改。

  • 各种屏幕的尺寸大小 :如所涉及的,这也可以在资源中处理。 这是使用一个通用布局文件但配置布局以在众多设备上使用的最佳方式。 如果您不熟悉,请参阅http://developer.android.com/guide/topics/resources/more-resources.html#Dimension了解如何使用尺寸

  • drawables :听起来这是你问题的症结所在。 正如您所提到的,使用九个补丁将帮助您减少应用占用空间并填补额外空间(有关九个补丁的更多信息,请参阅此处和此处 )。 Android设计文档中详细讨论了您应该支持的大小以及这些大小所需的密度,这里有很多细节,我甚至无法在这里重复它。 我已经提供了下面的链接,我记得很多地方都在讨论这个问题。

祝你好运!

以下是您会发现有用的Android设计文档的链接(其中一些已被提及):

除像素密度特定文件夹外,您还可以指定特定于屏幕大小的文件夹

 drawable/ drawable-large/ drawable-xlarge/ drawable-hdpi/ drawable-large-hdpi/ drawable-xlarge-hdpi/ drawable-xhdpi/ drawable-large-xhdpi/ drawable-xlarge-xhdpi/ 

因此,您可以针对各种屏幕尺寸和密度设计适当的缩放图形。 请注意,给定屏幕尺寸类别(例如“大”)只会让您大致了解设备的实际设备像素尺寸,但您将获得最佳/最大dp范围的良好指导。

例如,您可能想要在手机上显示100×100图像(屏幕尺寸为“正常”),您可以分别为100×100,150×150,200×200创建图像资源,分别用于drawable,drawable-hdpi,drawable-xhdpi文件夹。 但是在7英寸平板电脑上,即“大”屏幕尺寸设备,您可能会以200×200显示相同的图像,因此您的“可绘制大型”文件夹资产将是200×200,300×300,400×400和10英寸平板电脑,即“xlarge”屏幕,你可能会在300×300,450×450,600×600显示相同的图像,所以这些文件在“drawable-xlarge- *”文件夹中。

所有细节都在这里:

http://developer.android.com/guide/practices/screens_support.html

首先,您需要所有可能的屏幕布局

 drawable drawable-ldpi drawable-mdpi drawable-hdpi drawable-xhdpi drawable-xxhdpi // phones like s4 drawable-xlarge drawable-tvdpi // nexus 7 etc drawable-xlarge-xhdpi //tablet like nexus 10 layout : for phone layout-sw600dp layout-sw720dp 

然后你需要把所有使用9-补丁图像用于按钮等…你也可以使你的自定义drawable它将是简单和方便的工作..也可以通过使用开关和缩放它为每个屏幕采取dpi相应的布局。

因为,在我的一个项目中,我使用这种技术向每个分辨率设备显示各自的东西。

 DisplayMetrics metrics = getResources().getDisplayMetrics(); int densityDpi = (int) metrics.density ; switch (densityDpi) { case (int) 1.5: break; case (int) 2: //1.75 will be 2 in INT. break; default: break; } 

同时保留您将用于保证金填充的所有值等值-sv600dp用于tvdpi平板电脑,值-sw720dp用于平板电脑

最后但并非最不重要的是保持所有的东西尽可能多的通用,并把它放在drawable ..我已经看到一些人使用不同dpi的背景图案,并把它放在相应的drawable ..如果有像图案这样的东西使你的自定义相应地重复它,这将节省您的时间..希望它可以帮助你

为了拉伸所有图像以匹配手机,您可以使用sdp尺寸单位指定图像尺寸。 此尺寸单位相对于屏幕尺寸,因此它可以满足您的要求。