支持多屏幕尺寸-Android

支持多屏幕尺寸-Android,android,android-screen-support,android-screen,Android,Android Screen Support,Android Screen,我打算用Android开发新的应用程序。此应用程序只能在纵向模式下工作(即使是平板电脑)。此外,手机和平板电脑的UI和布局设计也应该类似。我们不能改变平板电脑的布局设计,因为它有巨大的使用面积。我们必须拉伸所有图像以匹配手机。我们可以用九块补丁。但我对在多个绘图表中使用图像有点困惑 根据我的分析(可能是错误的:),屏幕分为密度和大小。我们可以使用3:4:6:8的比例。但是这个比率是基于密度的。但在我的情况下,我必须拉伸整个UI以填充平板电脑屏幕 那么,对于这样一个可以支持多种设备的应用程序,可以

我打算用Android开发新的应用程序。此应用程序只能在纵向模式下工作(即使是平板电脑)。此外,手机和平板电脑的UI和布局设计也应该类似。我们不能改变平板电脑的布局设计,因为它有巨大的使用面积。我们必须拉伸所有图像以匹配手机。我们可以用九块补丁。但我对在多个绘图表中使用图像有点困惑

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

那么,对于这样一个可以支持多种设备的应用程序,可以使用哪些绘图功能呢。我们需要设计的屏幕尺寸是多少

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

另外,如果我使用多个APK来支持不同的屏幕大小,那么Drawable用于支持什么 1.小而正常 2.大的
3.Xlarge

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

drawable/
drawable-large/
drawable-xlarge/

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

drawable-xhdpi/
drawable-large-xhdpi/
drawable-xlarge-xhdpi/
因此,您可以为各种屏幕大小和密度设计适当比例的图形。请注意,给定的屏幕大小类别(例如“大”)只能让您大致了解设备的实际设备像素尺寸,但您会得到关于最小/最大dp范围的良好指导

例如,您可能想要在手机上显示一个100x100的图像(屏幕大小为“正常”),您可以分别为可绘制、可绘制hdpi和可绘制xhdpi文件夹创建100x100、150x150、200x200的图像资源。但是,在7英寸平板电脑,即“大”屏幕大小的设备上,您可能会以200x200显示相同的图像,因此您的“可绘制大”文件夹资产将为200x200、300x300、400x400,而在10英寸平板电脑,即“xlarge”屏幕上,您可能会以300x300、450x450、600x600显示相同的图像,因此这些文件将放在“可绘制xlarge-*”文件夹中

详情如下:


我只是做了一些非常类似的事情。为了在不创建新布局的情况下扩展应用程序,我使用了XML中设置的维度

res/values/dimensions.xml
res/values-sw600dp/dimensions.xml -> 7+ inches
res/values-sw720dp/dimensions.xml -> 10+ inches
维度是资源文件:

<dimen name="default_padding">11dp</dimen>
11dp
在600和720文件中,可以将尺寸增加约30%。 然后在布局中简单地使用
@dimen/default\u padding
,它将被缩放


关于图像,您要么确保所有资源都具有所有密度,要么为您的
ImageView
设置固定大小,并设置适当的
scaleType

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

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补丁的按钮等图像。。。你也可以使你的自定义绘图,这将是容易和方便的工作。此外,你可以采取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;
}
同时保留所有将用于边距填充的值,如tvdpi平板电脑的值为sw600dp,平板电脑的值为sw720dp

最后但并非最不重要的一点是,尽可能多地保持所有东西的通用性,并将其置于可绘制状态。。 我见过一些ppl使用不同dpi的背景图案,并将其放在各自的可绘制中。。如果有这样的东西,如模式,使您的自定义绘图,并重复相应的
那会节省你的时间。。希望它可以帮助您首先,您不想创建多个APK来支持多个屏幕密度。Android提供了支持一个构建中的所有内容所需的所有框架,您只需使用所需的密度创建正确的资源层次结构绘图

那么你到底需要什么。。。根据您的问题,请注意以下几点:

<activity android:name=".MainActivity" 
    android:label="@string/app_name"
    android:configChanges="orientation" > 
    ...
</activity>
  • 纵向模式:您可以使用以下命令在AndroidManifest文件中声明的每个活动中指定此模式:

    <activity android:name=".MainActivity" 
        android:label="@string/app_name"
        android:configChanges="orientation" > 
        ...
    </activity>
    
    ,如果您的目标API>=13,并且您使用了
    android:configChanges
    属性,那么您还应该使用
    android:screenSize
    属性来帮助指定大小更改

  • 各种屏幕的维度大小:如前所述,这也可以在参考资料中处理。这是使用一个通用布局文件的最佳方法,但可以配置布局以在多个设备上使用。如果不熟悉尺寸标注,请参见了解如何使用尺寸标注

  • 可拖拉物品:听起来这是你问题的关键。正如您所提到的,使用九个补丁将帮助您减少应用程序占用空间并填充额外空间(有关九个补丁的更多信息,请参阅和)。您应该支持的尺寸以及这些尺寸所需的密度在Android设计文档中进行了非常详细的讨论,太多细节了,我甚至无法在这里重新整理。我已经在下面提供了链接,指向我记得讨论过的尽可能多的地方

祝你好运

以下是Android设计文档的链接,您会发现这些文档很有用(其中一些已经提到):


为了拉伸所有图像以匹配手机,您可以使用指定图像大小。此大小单位与屏幕大小相关,因此它可以满足您的要求。

对不起,为什么您要在交换机中尝试将浮点作为整数处理?!加1.75将不会是2与隐式铸造。。。它将是1,比如1.5…是的,你是对的@WarrenFaith我忘了在里面使用math.ceil,我刚刚给出了他们如何处理事情的想法。至于float,我使用它是因为Android dpi是小数,但我需要根据设备密度在一些按钮中设置填充,所以我需要将其转换为int。即使使用ceil,也不应该为了方便而将特定的float值转换为int