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

4
我有一个Android应用程序,目前是在手机上构建的,现在我要更新它以支持平板电脑大小的屏幕(特别是Galaxy Tab 10.1)。我弄清了整个“res/layout”事情,所以没问题。然而,我在“AndroidManifest.xml”中设置了android:screenOrientation=”portra it”,为应用程序固定了屏幕方向。
现在,我想要以下内容:为每种屏幕尺寸设置一个固定的方向,其中一个为纵向固定(layout-small),另一个为横向固定。
使用“res/layout-small-land”和“res/layout-large-port”并不能满足我的要求,因为它仍会在纵向和横向之间切换。更糟糕的是,当我将手机旋转到横向时,应用程序崩溃,因为“res/layout-small-land”不存在。
我能否通过定义XML文件来实现这一点,还是必须添加代码?

你在Activity标签中定义了android:configChanges="keyboardHidden|orientation"吗? - Dhruvil Patel
不是。但当方向改变时似乎是这样的。当平板电脑处于纵向模式并且应用程序启动时,我也希望它在横向运行。 - Bart Friederichs
你想为哪种设备设置横屏模式?是hdpi/ldpi/mdpi吗?我认为你需要说明一下。即使你想根据设备屏幕布局更改方向,也不要在清单文件中为该活动设置固定方向。请尝试并告诉我结果。 - Dhruvil Patel
我想在大型或更大的屏幕上使用横向布局,在普通或更小的屏幕上使用纵向布局。 - Bart Friederichs
请查看此处的已接受答案:SO它将类似于您的答案。 - Shreyash Mahajan
我相信这个回答解决了你的问题。 - Stefan Ronnkvist
3个回答

6
你可以使用 setRequestedOrientation 来代替在清单文件中设置方向。在每个活动的 onCreate 方法中,检查设备是平板电脑还是智能手机,并设置所需的方向。
另一个选项是根据需要创建不同屏幕尺寸的多个 APK。可以参考创建不同屏幕尺寸的多个 APK进行操作。

-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);*/
}

不行,因为它不能阻止应用程序在我旋转设备时旋转。我想根据屏幕尺寸固定方向。 - Bart Friederichs
听我说,朋友,有不同的布局可用来支持所有可用的设备。你只需要停止从清单中固定方向,然后运行你的应用程序。它会起作用的。因为我之前试过了。 - Shreyash Mahajan
另请参考:https://dev59.com/WXI95IYBdhLWcg3w2R3z - Shreyash Mahajan
我已经从清单中删除了修复程序,有一个res/layout-large-land和一个res/layout-small-port,当我旋转设备时,应用程序会旋转(因为当平板电脑处于纵向模式时,会选择small-port布局)。我不想要那样;我想根据屏幕大小固定方向。 - Bart Friederichs
好的...所以如果你想根据屏幕大小设置固定布局,那么只能通过Java代码来实现。 - Shreyash Mahajan
感谢您更新的答案,但它与我的问题无关。我在谈论屏幕尺寸,而不是密度。问题只是我是否可以在XML中完成它,还是需要代码。现在我知道我需要代码了(并且已经实现了)。 - Bart Friederichs

-2

只需从manifest.xml中删除android:screenOrientation="portrait",并添加layout-large-land、layout-small-land,并保留layout-large、layout-small文件夹。

希望对您有用。享受编码的乐趣 :)


这并不会阻止应用程序在我旋转设备时进行旋转。 - Bart Friederichs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接