繁体   English   中英

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

[英]How to support different screen size in android

我正在 android 中开发一个应用程序,我必须支持所有不同的屏幕尺寸和密度。 所以我为 layout 创建了不同的文件夹: 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 中的以下代码支持所有 dpi。

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

并查看我的SO answer

从 Android 3.2(API 级别 13)开始,尺寸组(小文件夹、普通文件夹、大文件夹、超大文件夹)已被弃用,取而代之的是一种基于可用屏幕宽度管理屏幕尺寸的新技术。



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

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

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

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

说到支持多种屏幕尺寸,这听起来很崇高。下面给出了更好的结果。

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

使用显示指标检查设备宽度和高度

放置/找出哪种布局适合 Device 的结果宽度。

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

所有都应该在 setContentView() 之前检查。否则你会给自己带来麻烦

     Configuration config = getResources().getConfiguration();


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

在顶部,我创建了许多布局以适应多个屏幕,这完全取决于您,您可能与否。您可以从哪个 API 中查看 Play 商店评论,下载量很高..表格,您必须继续.

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

看一下这个

使用 Github 提供的sdp 库

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

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

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

Android 自行调整,如果您想为高分辨率设备和其他设备使用不同的图像,您可以为不同的文件夹放置单独的图像。 否则,只需为某些图像放入一个 drawable,layout 文件夹,您也可以制作 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"/>

添加到@ud_an

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM