如何在Android上为不同的设备修复屏幕方向

时间:2014-08-29 21:12:46

标签: android android-layout layout manifest screen-orientation

我想在我的Android应用中禁用更改方向,但我想允许用户使用他的原生方向:平板电脑的风景和手机的肖像。

我尝试设置" android:screenOrientation"具有不同的价值观,但我找不到合适的价值。

这样的任务是否需要编写java代码(以及我需要编写的代码),或者这可以使用manifest来解决?

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值。

我怎么做?

2 个答案:

答案 0 :(得分:0)

在布局xml中设置android:screenOrientation="landscape"是这样做的方法。要支持不同的设备(平板电脑和手机),您需要使用尺寸限定符。在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

中的尺寸限定符部分

答案 1 :(得分: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" />