如何在android中支持不同的屏幕大小

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

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

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

 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" /> 

也检查我的答案 。

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

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

Android自己调整自己,你可以把不同的图像为不同的文件夹,如果你想使用不同的图像高分辨率的设备和其他设备。 否则,只需将一个可绘制的布局文件夹放入一些可以制作9-patch的图像。

在这里阅读

您需要在多个屏幕支持链接清单中的权限

 <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"/> 

从Android 3.2(API级别13)开始,大小组(文件夹小,正常,大,xlarge)不推荐使用新技术来根据可用的屏幕宽度来管理屏幕大小。


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

1) 最小宽度 – 屏幕的基本尺寸,如可用屏幕区域的最短尺寸所示。

限定符值:sw'dp value'dp

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


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

限定符值:w'dp value'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

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

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

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

添加到@ud_an

为布局创建不同的文件夹不是一个好习惯。 创建您的布局,使其在所有屏幕尺寸下均可正常工作。 要做到这一点,玩布局属性。 您只需要为hdpi,mdpi和ldpi类型使用不同的映像。 其余的将由android操作系统管理。

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

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

这听起来很崇高,当涉及到支持多个屏幕尺寸。下面gves更好的结果。

 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最佳实践。

看一下这个

看看这里,所有关于Android屏幕支持的说明http://developer.android.com/guide/topics/manifest/supports-screens-element.html