我正在使用android开发应用程序,并且必须支持所有不同的屏幕尺寸和密度。因此,我为布局创建了其他文件夹:layout-small layout-largelayout

然后我为图像创建了其他文件夹:ldpi, mdpihdpi。在所有可绘制文件夹中,图像必须具有不同的大小吗?我问这个原因是因为我的手机屏幕尺寸较大且密度中等,显示的图像会较小,并且尺寸不正确?

评论

您可以在此处找到一些帮助stackoverflow.com/questions/16706076/…

android中多屏支持的可能重复项

#1 楼

对于不同的屏幕尺寸,以下是应用程序中的资源目录列表,该应用程序为不同的屏幕尺寸提供了不同的布局设计,并为小,中,高和超高密度屏幕提供了不同的位图可绘制对象。

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size
res/layout-large/my_layout.xml       // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res/drawable-mdpi/my_icon.png        // bitmap for medium density
res/drawable-hdpi/my_icon.png        // bitmap for high density
res/drawable-xhdpi/my_icon.png       // bitmap for extra high density


清单中的以下代码支持所有dpi。

<supports-screens android:smallScreens="true" 
          android:normalScreens="true" 
          android:largeScreens="true"
          android:xlargeScreens="true"
          android:anyDensity="true" />


还要查看我的SO答案。

评论


从3.2开始不推荐使用不同的文件夹进行布局,例如layout-small

–希里(Shirish Herwade)
13年2月12日在9:58

我的layout-large和layout-xlarge布局没有被使用

– Vikky
13年6月15日在8:57

我们应该添加layout-xxlarge吗?

– Alicanbatur
13年8月24日在9:18

这个答案在2019年仍然有用吗,请您回复我。

– Shahjad Ans Sunny
19年7月14日在10:35

我们如何检查哪个布局显示的是小尺寸的默认@Uttam

–MustafaShaikh
19年9月7日在7:57

#2 楼

从Android 3.2(API级别13)开始,不赞成使用尺寸组(小,中,大,xlarge文件夹),而是采用了一种基于可用屏幕宽度来管理屏幕尺寸的新技术。

那里您可以根据布局的可用空间来指定不同的资源配置:
1)最小宽度-屏幕的基本尺寸,由可用屏幕区域的最小尺寸表示。
限定符值:sw'dp value'dp
例如。 res / sw600dp / layout.xml->将用于所有大于或等于600dp的屏幕尺寸。

2)可用屏幕宽度-以dp单位指定应该使用资源的最小可用宽度。
限定符值:w'dp值'dp
,例如。 res / w600dp / layout.xml->将用于宽度大于或等于600dp的所有屏幕。

3)可用屏幕高度-以dp单位指定最小屏幕高度,
限定符值:h'dp value'dp
例如。 res / h600dp / layout.xml->将用于所有高度大于或等于600dp的屏幕。


所以最后,您的文件夹结构可能如下所示:
res / layout / layout.xml->用于手机(可用宽度小于600dp)
res / layout-sw600dp / layout.xml->用于7英寸平板电脑(宽600dp和更大)
res / layout-sw720dp / layout.xml->适用于10英寸平板电脑(宽720dp和更大)

有关更多信息,请阅读官方文档:https://developer.android.com/guide /practices/screens_support.html#DeclaringTabletLayouts

评论


此处的最小值表示<最小值或<=最小值?

–西
19年2月21日在13:43



也可以使用此方法获取值,例如values-h400dp?

–西
19年2月21日在14:00

这似乎并不准确。例如,我有一个layout-h400dp,Android Studio一直为实际高度为320px的设备选择该布局。

– Fran Marzoa
1月30日13:27

#3 楼

您可以使用sdp大小单位,而不是dp大小单位。 sdp大小单位是相对于屏幕大小的,因此通常首选使用多个屏幕大小。

请小心使用!例如,在大多数情况下,您仍然需要为平板电脑设计不同的布局。

评论


嗨,它建议使用sdp libarary吗? @ dimen / _18ssp

–杰西
6月12日11:05

#4 楼

谈到支持多种屏幕尺寸,这听起来不错。以下提供了更好的结果。

br /放置/确定哪种布局适合设备的最终宽度。

res/layout/layout-w120dp
res/layout/layout-w160dp
res/layout/layout-w240dp
res/layout/layout-w160dp
res/layout/layout-w320dp
res/layout/layout-w480dp
res/layout/layout-w600dp
res/layout/layout-w720dp


应在setContentView()之前检查所有内容。否则会给自己造成麻烦

let smallestScreenWidthDp="assume some value(Which will be derived from Display metrics)"


在顶部,我创建了这么多的布局以适合多个屏幕,这一切都取决于您,您可以或不可以。您可以看到Play商店

我希望它对您有帮助。

我希望它对您有帮助。很少使用某些第三方库,这可能会减少您的工作量,但是这不是最佳实践。习惯使用Android最佳做法。

检查一下

评论


我创建了以上所有文件夹(120dp-720dp),然后将布局复制到了每个文件夹中。那是正确的方法还是我应该在每个不同的文件夹中编辑每个不同的布局?

–约翰尼
17年4月20日在14:48

#5 楼

使用Github中提供的sdp库

#6 楼

Android会自行调整,如果要将高分辨率设备和其他设备使用不同的图像,则可以为不同的文件夹放置单独的图像。否则,只需将一个可绘制的布局文件夹仅用于某些图像,您也可以制作9个补丁。

请在此处阅读

您需要清单中的许可才能获得多屏支持链接

<supports-screens android:resizeable=["true"| "false"]
                  android:smallScreens=["true" | "false"]
                  android:normalScreens=["true" | "false"]
                  android:largeScreens=["true" | "false"]
                  android:xlargeScreens=["true" | "false"]
                  android:anyDensity=["true" | "false"]
                  android:requiresSmallestWidthDp="integer"
                  android:compatibleWidthLimitDp="integer"
                  android:largestWidthLimitDp="integer"/>


评论




–胸部
11年11月24日在11:39

#7 楼

您可以动态计算屏幕的尺寸

Display mDisplay= activity.getWindowManager().getDefaultDisplay();
int width= mDisplay.getWidth();
int Height= mDisplay.getHeight();


可以使用通过此方法获得的宽度和高度来设置布局。

评论


差远了。我曾经尝试探索这样的选择...我不会得到1920x1080,但是取决于方向,例如1920x 1036或我的导航栏设置为什么。在横向环境中,例如,我将获得1080x986的分辨率...我希望它变得如此简单....类似于html和表格buuut使用旧样式.... :(

–ИвоНедев
15年2月26日在13:12

#8 楼

添加到@ud_an

为布局创建不同的文件夹不是一个好习惯。创建您的布局,使其适合所有屏幕尺寸。为此,请使用布局属性。
您只需要为hdpi,mdpi和ldpi类型使用不同的图像。其余的将由android OS管理。

评论


真?我的一个旧应用程序使用dp进行布局文件夹中的测量,而在更高的分辨率下,它看上去很愚蠢(微小的按钮,巨大的布局等),操作系统根本无法很好地处理它。代码虽然很旧,所以也许我做错了。

–瑞奇
2011年11月24日11:17



如果您想最大程度地减少编码工作,则可以在不使用dp的情况下以一种布局处理所有内容。避免对布局尺寸进行硬编码,并使它们动态显示内容。如我所说,对于微小的按钮,您需要不同的可绘制对象。由您决定重新编码不同的布局或使布局适用于所有尺寸。

– Shafi
2011年12月1日下午13:06

此处提供更多信息:developer.android.com/training/multiscreen/screensizes.html

– Shafi
2011年12月20日下午4:59

从3.2开始不推荐使用不同的文件夹进行布局,例如layout-small

–希里(Shirish Herwade)
13年2月12日在9:58

@Ricky我有同样的问题...您做了什么修复?

–Ruchir Baronia
2015年12月1日下午4:06

#9 楼

您可以为应用程序将要运行的高分辨率/大小创建位图,并在代码中(在运行时)调整位图的大小。

检查本文
http://nuvornapps-en.blogspot。 com.es/