我想在我的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.xml
和res/layout-port/main.xml
中澄清方向。
我想我需要在res/layout/main.xml
中声明布局,并在res/layout-land/main.xml
和res/layout-port/main.xml
中派生所有布局属性,并在派生布局中仅覆盖android:screenOrientation
值。
我怎么做?
答案 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" />