Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android上为不同的设备确定屏幕方向_Android_Android Layout_Layout_Manifest_Screen Orientation - Fatal编程技术网

如何在android上为不同的设备确定屏幕方向

如何在android上为不同的设备确定屏幕方向,android,android-layout,layout,manifest,screen-orientation,Android,Android Layout,Layout,Manifest,Screen Orientation,我想在我的android应用程序中禁用更改方向,但我想允许用户使用其本机方向:平板电脑的横向和手机的纵向 我尝试用不同的值设置android:screenOrientation,但找不到合适的值 这样的任务是否需要编写java代码,我需要编写什么代码,或者这可以通过使用清单来解决 UPD在@Pierrew的提示中,我需要为默认布局创建res/layout/main.xml,为横向布局创建res/layout land/main.xml,为纵向布局创建res/layout port/main.xm

我想在我的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值


我该怎么做?

在布局xml中设置android:screenOrientation=landscape就是这样做的。要支持不同的平板电脑和手机设备,您需要使用大小限定符。在res文件夹中,必须创建res/layout large/main.xml以支持tablet。所以,如果你想要平板电脑的景观。在res/layout large/main.xml中,您可以放置android:screenOrientation=scape。在您的普通res/layout/main.xml中,您可以将android:screenOrientation=grait放入。Android将自动检测用户正在使用的设备,并加载相应的xml。有关更多信息,请查看

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

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);
活动信息:

这将为您带来好处:

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

这个问题得到了回答,我如何在一个文件中描述布局,如何只描述res/layout large/main.xml中的差异,以及我需要为手机创建什么?如果其他一切都保持不变,然后,您必须复制res/layout中的所有内容。默认情况下,此文件夹用于手机res/layout large/,然后更改配置。这是由Android设计的,因为人们通常会重新安排布局,以确保所有内容都适合大屏幕。此外,如果使用relativelayout,所有UI元素都可能会发生移动,当您从横向模式切换到纵向模式时,您必须确保所有内容都正确对齐。