3

我有一个构建在手机上的 Android 应用程序,我现在要更新它以支持平板电脑大小的屏幕(特别是 Galaxy Tab 10.1)。我想通了整个res/layout事情,所以这很好。但是,我将我的应用程序构建为具有固定的屏幕方向AndroidManifest.xml,设置为android:screenOrientation="portrait".

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

使用res/layout-small-landandres/layout-large-port并没有做我想要的,因为它仍然从纵向切换到横向并返回。更糟糕的是,当我将手机旋转到横向时,应用程序会崩溃,因为res/layout-small-land它不存在。

我可以通过定义 XML 文件来做到这一点,还是必须添加代码?

4

3 回答 3

6

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

另一种选择可能是为不同的屏幕尺寸创建多个 APK,具体取决于您的需要。

于 2012-10-31T13:21:30.320 回答
-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);*/
}
于 2012-10-31T13:05:29.943 回答
-2

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

并添加 layout-large-land、layout-small-land 并保留 layout-large、layout-small 文件夹。

希望对你有效。享受编码:)

于 2012-10-31T12:56:24.947 回答