如何在android中支持不同的屏幕尺寸

时间:2011-11-24 11:01:07

标签: android screen

我正在开发一个Android应用程序,我必须支持所有不同的屏幕尺寸和密度。所以我为布局创建了不同的文件夹:layout-small layout-largelayout

然后我为图片创建了不同的文件夹:ldpi, mdpihdpi。在所有可绘制文件夹中,图像必须具有不同的大小?我问这个原因我有一个屏幕尺寸大且密度适中的手机,显示的图像会更小而且尺寸不合适吗?

9 个答案:

答案 0 :(得分:73)

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

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

Manifest中的以下代码支持所有dpis。

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

还可以查看我的SO answer

答案 1 :(得分:9)

您可以使用sdp尺寸单位而不是dp尺寸单位。 sdp尺寸单位与屏幕尺寸相关,因此通常首选定位多种屏幕尺寸。

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

答案 2 :(得分:6)

从Android 3.2(API级别13)开始,不推荐使用大小组(文件夹small,normal,large,xlarge),以支持基于可用屏幕宽度管理屏幕大小的新技术。
/>


您可以根据布局的可用空间指定不同的资源配置:

1)最小宽度 - 屏幕的基本尺寸,由可用屏幕区域的最短尺寸表示。

限定符值:sw&lt; dp value&#39; dp

例如。 res / sw600dp / layout.xml - &gt;将用于所有大于或等于600dp的屏幕尺寸。这不会考虑设备方向。

2)可用屏幕宽度 - 以dp为单位指定应使用资源的最小可用宽度。

限定符值:w&#39; dp value&#39; dp

例如。 res / w600dp / layout.xml - &gt;将用于所有屏幕,宽度大于或等于600dp。

3)可用屏幕高度 - 指定应使用资源的dp单位的最小屏幕高度。

限定符值:h&#39; dp value&#39; dp

例如。 res / h600dp / layout.xml - &gt;将用于所有屏幕,高度大于或等于600dp。


所以最后你的文件夹结构可能如下所示:

res / layout / layout.xml - &gt;用于手机(可用宽度小于600dp)
res / layout-sw600dp / layout.xml - &gt; 7英寸平板电脑(600dp宽大) res / layout-sw720dp / layout.xml - &gt; 10英寸平板电脑(720dp宽大)

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

答案 3 :(得分:4)

当涉及支持多个屏幕大小时,这听起来很高。以下会产生更好的结果。

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

使用显示度量标准设备宽度和高度

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

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

所有都应该在setContentView()之前检查。否则你会让自己陷入困境

     Configuration config = getResources().getConfiguration();

     Configuration config = getResources().getConfiguration();

        if (config.smallestScreenWidthDp >= 600) {
            setContentView(R.layout.layout-w600dp);
        } else {
            setContentView(R.layout.main_activity);
        }

在顶部,我创建了很多适合多个屏幕的布局,这一切都取决于你,你可能与否。你可以看到来自哪个API,下载很高的游戏商店评论。形成你必须继续。

我希望它可以帮到你很多。很少使用一些第三方库,这可能会减少你的工作,但这不是最好的做法。习惯Android最佳实践。

Check This Out

答案 4 :(得分:3)

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

read here

您需要多个屏幕support link

的清单中的权限
<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"/>

答案 5 :(得分:2)

您可以动态地找出屏幕的尺寸

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

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

答案 6 :(得分:2)

使用github提供的sdp库

答案 7 :(得分:0)

添加到@ud_an

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

答案 8 :(得分:0)

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

查看这篇文章 http://nuvornapps-en.blogspot.com.es/