0

我希望我的应用程序支持不同的屏幕尺寸。我在 /res 目录中添加文件夹“layout-small 和 layout-large”。但是在我的活动中无法访问此文件夹中的 XML。所以我将所有 XML 添加到默认布局中并添加此代码

if((getResources().getConfiguration().screenLayout && 
      Configuration.SCREENLAYOUT_SIZE_SMALL) == Configuration.SCREENLAYOUT_SIZE_SMALL) {
          setContentView(R.layout.main1);
    }else if((getResources().getConfiguration().screenLayout &&
                Configuration.SCREENLAYOUT_SIZE_LARGE) == Configuration.SCREENLAYOUT_SIZE_LARGE){
                     setContentView(R.layout.main2);
        }
        else
            setContentView(R.layout.main);

在我的活动中,但是当我的 AVD 皮肤为 1024*600 并且 hw.lcd.dencity 为 160(大)时,它不起作用。

有什么帮助吗?

4

5 回答 5

2

大小:小,正常,大
密度:ldpi,mdpi,hdpi,
nodpi(无自动缩放)纵横比:长,不长
方向:陆地

用法:

res/layout/my_layout.xml            
res/layout-small/my_layout.xml      
res/layout-large/my_layout.xml      
res/layout-large-long/my_layout.xml      
res/layout-large-land/my_layout.xml     
res/drawable-ldpi/my_icon.png  
res/drawable-mdpi/dpi/my_icon.png  
res/drawable-hdpi/my_icon.png      
res/drawable-nodpi/composite.xml   

将您的应用限制为特定的屏幕尺寸(通过 AndroidManifest):

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
...
<supports-screens
          android:largeScreens="true"
          android:normalScreens="true"
          android:smallScreens="true"
          android:anyDensity="true" />
...
</manifest>

对于代码级 tweeking:

float scale = getContext().getResources().getDisplayMetrics().density;

不要忘记:

dpi    = 160; //At 160dpi
pixels = dips * (density / dpi)

另请参阅在android中支持多屏

于 2013-01-08T13:22:57.530 回答
1

请看这个:

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

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

更多阅读,请参阅此链接如何在 android 中支持不同的屏幕尺寸

于 2013-01-08T13:19:02.633 回答
1

布局名称必须相同

layout-small \ main1.xml
layout-normal\ main1.xml
layout-large \ main1.xml

你不需要处理这个,android会自动决定使用哪个布局

setContentView(R.layout.main1);
于 2013-01-08T13:16:47.350 回答
0

Android 会自动为您执行此操作。对于不同的屏幕尺寸,制作不同的 xml 文件,但给它们相同的名称,例如main.xml,将 forlarge放在文件夹/res/layout-large中,for smallin/res/layout-small等等。

在 中onCreate(),只要放setContentView(R.layout.main)

有关更多信息,请考虑阅读Android Developers 的此站点

于 2013-01-08T13:17:44.070 回答
0

Android 将自动为给定的特定设备挑选最佳资源。如果没有可用的匹配资源,系统将使用默认资源并根据需要将其放大或缩小以匹配当前的屏幕尺寸和密度。

“默认”资源是那些没有用配置限定符标记的资源。

于 2017-06-12T10:37:20.437 回答