根据屏幕尺寸设置固定方向

时间:2012-10-31 12:28:35

标签: android android-layout layout

我有一个基于手机的Android应用程序,我现在要更新,以支持平板电脑大小的屏幕(特别是Galaxy Tab 10.1)。我想出了整个res/layout的东西,所以没关系。但是,我构建了自己的应用,在AndroidManifest.xml中设置了固定的屏幕方向,设置为android:screenOrientation="portrait"

现在,我想拥有以下内容:每个屏幕尺寸都有一个固定方向,一个是纵向(布局小)固定,另一个是横向。

使用res/layout-small-landres/layout-large-port并不能达到我想要的效果,因为它仍然可以从纵向切换到横向和背面。更糟糕的是,当我将手机旋转到横向时,应用程序崩溃,因为res/layout-small-land不存在。

我可以通过定义XML文件来实现,还是必须添加代码?

3 个答案:

答案 0 :(得分:6)

您可以使用setRequestedOrientation,而不是在清单上修改方向。在每个活动的onCreate方法中,检查您是否在平板电脑或智能手机上并设置所需的方向。

另一个选项可能是Creating Multiple APKs for Different Screen Sizes,具体取决于您的需求。

答案 1 :(得分:-1)

是的,您可以为其创建布局。请参阅此处接受的答案:SO

它会解决你的问题。

<强>更新

如果您想根据屏幕尺寸进行设置,请参阅以下代码以获取屏幕密度。并且基于它和屏幕尺寸,您必须以编程方式设置方向。

检查密度的代码:

public void ScreenSupport(){
     Display display = getWindowManager().getDefaultDisplay();
     DisplayMetrics dm = new DisplayMetrics();
     display.getMetrics(dm);

     int width = display.getWidth();
     int height = display.getHeight();
     int density = dm.densityDpi;
     String densityString = null;

     if(density == DisplayMetrics.DENSITY_HIGH) {
         densityString = "HDPI";
     } else if(density == DisplayMetrics.DENSITY_MEDIUM) {
         densityString = "MDPI";
     } else if(density == DisplayMetrics.DENSITY_LOW) {
         densityString = "LDPI";
     }else if(density == DisplayMetrics.DENSITY_DEFAULT) {
         densityString = "DEFAULT";
     }

    /* System.out.println("Screen Height is: "+height+ " and Width is: "+width);
     System.out.println("Screen Support: "+densityString);*/
}

答案 2 :(得分:-2)

只需从manifest.xml中删除android:screenOrientation="portrait"

即可

添加布局大片土地,布局小土地,并保持布局大,布局小的文件夹。

希望它适合你。享受编码:)