防止Android上的屏幕旋转

我有我的一个活动,我想防止旋转,因为我开始一个AsyncTask,并且屏幕旋转使其重新启动。

有没有办法告诉这个活动“即使用户像疯了一样摇动手机,不要旋转屏幕?

android:screenOrientation="portrait"添加到清单或landscape<activity>元素中,就完成了。

您可以按照下面的逻辑来防止 AsyncTask运行自动旋转屏幕:

  1. 使用getRequestedOrientation()将您的当前屏幕方向存储在您的活动中。
  2. 使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)禁用自动屏幕方向。
  3. 运行/执行你的AsyncTask
  4. AsyncTask的最后,使用setRequestedOrientation(oldOrientation)恢复以前的方向状态。

请注意,有几种方法可以访问AsyncTask Activity (在UI线程上运行)属性。 你可以实现你的AsyncTask作为一个内部类,或者你可以使用消息Handler戳你的Activiy类。

在你的Manifest文件中,对于你想locking屏幕旋转的每个Activity添加:如果你想locking在水平模式下:

 <activity ... ... android:screenOrientation="landscape"> 

或者如果你想locking在垂直模式下:

 <activity ... ... android:screenOrientation="portrait"> 

我发现最简单的方法就是放

 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

在onCreate之后

 setContentView(R.layout.activity_main); 

所以…

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } 

Activity.java

 @Override public void onConfigurationChanged(Configuration newConfig) { try { super.onConfigurationChanged(newConfig); if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { // land } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { // port } } catch (Exception ex) { } 

AndroidManifest.xml中

  <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name="QRCodeActivity" android:label="@string/app_name" android:screenOrientation="landscape" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

而不是进入AndroidManifest,你可以这样做:

 screenOrientation = getResources().getConfiguration().orientation; getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); ... AsyncTask screenOrientation = getResources().getConfiguration().orientation; @Override protected void onPostExecute(String things) { context.setRequestedOrientation(PlayListFragment.screenOrientation); or context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); } 

这里唯一的缺点是需要API等级18或更高。 所以基本上这是矛尖。

AndroidManifest.xml中的ACTIVITY的以下属性是您所需要的:

 android:configChanges="orientation" 

那么,完整的活动节点将是:

 <activity android:name="Activity1" android:icon="@drawable/icon" android:label="App Name" android:excludeFromRecents="true" android:configChanges="orientation"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> 

加:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); ... ... ... } 

如果您使用的是Android开发工具 (ADT)和Eclipse ,则可以转到您的AndroidManifest.xml – > 应用程序选项卡 – >然后select您的活动。 最后,select你喜欢的方向。 您可以select多个选项之一。

您必须在manifest.xml文件中添加以下代码。 该活动不应该旋转,在该活动中添加此元素

 android:screenOrientation="portrait" 

然后它不会旋转。