如何修复Android上不同设备的屏幕方向
我想禁用在我的Android应用程序中更改方向,但我想允许用户使用他的本机方向:横向平板电脑和手机肖像。如何修复Android上不同设备的屏幕方向
我尝试使用不同的值设置“android:screenOrientation”,但找不到合适的值。
是这样的任务需要编写java代码(和我需要写什么代码),或者这可以使用清单解决?
UPD正如@ Pierrew的提示,我需要为纵向布局创建res/layout/main.xml
为默认布局,res/layout-land/main.xml
景观布局和res/layout-port/main.xml
。所以,我需要知道,如何定义res/layout/main.xml
中的所有布局,并且只阐明了res/layout-land/main.xml
和res/layout-port/main.xml
中的方向。
我想我需要在res/layout/main.xml
声明布局,并在res/layout-land/main.xml
和res/layout-port/main.xml
带来的一切布局属性只覆盖android:screenOrientation
派生布局价值。
我该怎么做?
设置android:screenOrientation="landscape"
在布局xml是做到这一点的方法。要支持不同的设备(平板电脑和手机),您需要使用大小限定符。在您的res文件夹中,您将不得不创建res/layout-large/main.xml以支持平板电脑。所以如果你想要平板电脑的景观。在你的res/layout-large/main.xml中,你把android:screenOrientation="landscape"
。在你的普通res/layout/main.xml中,你可以放android:screenOrientation="portrait"
。 Android会自动检测用户正在使用的设备并加载适当的xml。欲了解更多信息,请查看http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSizeQuali
而我如何描述布局在一个文件,并只描述res/layout-large/main.xml中的差异(以及我需要为手机创建的内容?) – 2014-08-29 22:48:01
如果其他所有内容保持不变,那么您将不得不复制res/layout内的所有内容(默认情况下此文件夹用于手机)res/layout-large /,然后进行配置更改。这是通过Android设计的,因为人们通常会重新排列布局以确保所有内容都适合大屏幕。 – Pierrew 2014-08-29 23:02:24
此外,如果您使用relativelayout,所有UI元素可能会移动,您必须确保在从横向模式切换到纵向模式时,所有内容都可以正确对齐。 – Pierrew 2014-08-29 23:08:34
中的大小限定符部分您可以使用这些方法使用一些小逻辑。
Boolean isTablet = (ctx.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
以编程方式更改屏幕方向。
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
ActivityInfo:
http://developer.android.com/reference/android/content/pm/ActivityInfo.html
这应该为你做的伎俩:
import android.provider.Settings;
public static void setAutoOrientationEnabled(ContentResolver resolver, boolean enabled){
Settings.System.putInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, enabled ? 1 : 0);
}
添加许可权的AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
这个问题是一个已答复[这里](http://stackoverflow.com/questions/9627774/android-allow-portrait-and-landscape-for-tablets-but-force-portrait-on-phone) – 2014-08-29 21:22:00