我将在Android中开发新的应用程序。此应用程序应仅以纵向(即使是平板电脑)工作。在手机和平板电脑上,UI和布局设计应该类似。我们无法改变平板电脑的布局设计,因为它有很大的使用面积。我们必须拉伸所有图像以匹配手机。我们可以使用九个补丁。但我对在多个drawable中使用图像有点困惑。
根据我的分析(可能是错误的...... :))屏幕分为密度和大小。我们可以使用3:4:6:8的缩放比例。但这个比例是基于密度的。但在我的情况下,我必须拉伸整个用户界面来填充平板电脑屏幕。
那么可以用于这样一个可以支持多个设备的应用程序的drawable是什么呢?我们必须设计哪些屏幕尺寸。
这个应用程序需要近100个布局。所以我打算保持单一布局,并使用每个布局的重量来设计布局,而不是使用尺寸。
此外,如果我使用多个APK来支持不同的屏幕尺寸,那么用于支持的可绘制内容是什么 1.小而正常 2.大 3. Xlarge
答案 0 :(得分:16)
我做了一件非常相似的事情。要在不创建新布局的情况下拉伸应用程序,我使用了在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>
您可以在600和720文件中将尺寸增加约30%。
然后在您的布局中简单地使用@dimen/default_padding
,它将被缩放
关于图片,您要么确保所有资产都拥有所有密度,要么将固定尺寸设置为ImageView
和scaleType
答案 1 :(得分:5)
首先,您不希望创建多个APK来支持多个屏幕密度。 Android提供了在一个构建中支持所有内容所需的所有框架,您只需要创建具有所需密度的正确资源层次结构drawable。
那么你究竟需要什么...基于你的问题:
纵向模式:您可以使用以下内容在AndroidManifest文件中声明的每个Activity中指定此项:
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="orientation" >
...
</activity>
注意:根据Android docs,如果您的定位API&gt; = 13,并且您使用android:configChanges
属性,则还应使用android:screenSize
属性来帮助指定大小更改
各种屏幕的尺寸:如上所述,这也可以在资源中处理。这是使用一个通用布局文件但配置布局以在众多设备上使用的最佳方式。如果您不熟悉,请参阅http://developer.android.com/guide/topics/resources/more-resources.html#Dimension了解如何使用尺寸
drawables :听起来这是你问题的症结所在。正如您所提到的,使用九个补丁可以帮助您减少应用占用空间并填补额外空间(有关九个补丁的更多信息,请参阅here和here)。你应该支持的尺寸和这些尺寸所需的密度在Android设计文档中有详细的讨论,如此详细,我甚至无法在这里正确地重复它。我在下面提供了一些链接,我记得很多地方都在讨论这个问题。
以下是您会发现有用的Android设计文档的链接(其中一些已被提及):
答案 2 :(得分:4)
除了像素密度特定文件夹外,您还可以指定特定于屏幕尺寸的文件夹
drawable/
drawable-large/
drawable-xlarge/
drawable-hdpi/
drawable-large-hdpi/
drawable-xlarge-hdpi/
drawable-xhdpi/
drawable-large-xhdpi/
drawable-xlarge-xhdpi/
因此,您可以针对各种屏幕尺寸和密度设计适当的缩放图形。请注意,给定屏幕尺寸类别(例如“大”)只会让您大致了解设备的实际设备像素尺寸,但您将获得最佳/最大dp范围的良好指导。
例如,您可能想要在手机上显示100x100图像(屏幕尺寸为“正常”),您可以分别为100x100,150x150,200x200创建图像资源,分别用于drawable,drawable-hdpi,drawable-xhdpi文件夹。但是在7英寸平板电脑上,即“大”屏幕尺寸设备,您可能会以200x200显示相同的图像,因此您的“drawable-large”文件夹资产将是200x200,300x300,400x400和10英寸平板电脑,即“xlarge”屏幕,你可能会在300x300,450x450,600x600显示相同的图像,所以这些图像在“drawable-xlarge- *”文件夹中。
所有细节都在这里:
http://developer.android.com/guide/practices/screens_support.html
答案 3 :(得分:4)
首先,您需要所有可能的屏幕布局
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;
}
同时保留您将用于保证金填充的所有值等值 - 用于tvdpi平板电脑的sw600dp,用于平板电脑的值-sw720dp
最后但并非最不重要的是尽可能保持所有东西的通用性,并将其放入drawable .. 我见过一些人使用不同dpi的背景图案并把它放在相应的可绘制的..如果有像图案这样的东西使你的自定义drawble并相应地重复它 这将节省您的时间..希望它可以帮助您
答案 4 :(得分:0)
为了拉伸所有图像以匹配手机,您可以使用sdp size unit指定图像尺寸。此尺寸单位与屏幕尺寸有关,因此可以满足您的要求。