2014-08-29 70 views
0

我想禁用在我的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.xmlres/layout-port/main.xml中的方向。

我想我需要在res/layout/main.xml声明布局,并在res/layout-land/main.xmlres/layout-port/main.xml带来的一切布局属性只覆盖android:screenOrientation派生布局价值。

我该怎么做?

+1

这个问题是一个已答复[这里](http://stackoverflow.com/questions/9627774/android-allow-portrait-and-landscape-for-tablets-but-force-portrait-on-phone) – 2014-08-29 21:22:00

回答

0

设置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

+0

而我如何描述布局在一个文件,并只描述res/layout-large/main.xml中的差异(以及我需要为手机创建的内容?) – 2014-08-29 22:48:01

+0

如果其他所有内容保持不变,那么您将不得不复制res/layout内的所有内容(默认情况下此文件夹用于手机)res/layout-large /,然后进行配置更改。这是通过Android设计的,因为人们通常会重新排列布局以确保所有内容都适合大屏幕。 – Pierrew 2014-08-29 23:02:24

+0

此外,如果您使用relativelayout,所有UI元素可能会移动,您必须确保在从横向模式切换到纵向模式时,所有内容都可以正确对齐。 – Pierrew 2014-08-29 23:08:34

0

中的大小限定符部分您可以使用这些方法使用一些小逻辑。

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" />