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

时间:2013-01-08 13:09:40

标签: android screen-size

我希望我的应用支持不同的屏幕尺寸。我在/ res目录中添加“layout-small和layout-large”文件夹。但是我的activity中无法访问此文件夹中的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(大)时,它无效。

任何帮助?

5 个答案:

答案 0 :(得分: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)

另请参阅support multiple screen in android

答案 1 :(得分:1)

布局名称必须相同

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

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

setContentView(R.layout.main1);

答案 2 :(得分: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

更多阅读,请参阅此链接How to support different screen size in android

答案 3 :(得分:0)

Android会自动为您完成此操作。对于不同的屏幕尺寸,请制作不同的xml文件,但为它们指定相同的名称,例如main.xml,并将large的文件放在文件夹/res/layout-large中,用于small/res/layout-small,等等。

<{1>}中的

,只需添加onCreate()

有关详情,请参阅阅读this site from Android Developers

答案 4 :(得分:0)

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

&#34;默认&#34;资源是那些未使用配置限定符标记的资源。