我有一个我想阻止旋转的活动,因为我正在启动一个AsyncTask,屏幕旋转使它重新启动。
有没有办法告诉这个活动“即使用户像疯了一样摇晃他的手机也不要旋转屏幕”?
我有一个我想阻止旋转的活动,因为我正在启动一个AsyncTask,屏幕旋转使它重新启动。
有没有办法告诉这个活动“即使用户像疯了一样摇晃他的手机也不要旋转屏幕”?
当前回答
android: screenOrientation =“肖像” 在应用程序标签<application
and
<活动 ... ... android: screenOrientation = "锁定" >
其他回答
防止屏幕旋转只需在清单中添加以下一行。
<activity
android:name=".YourActivity"
android:screenOrientation="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>
如果您正在使用Android开发工具(ADT)和Eclipse 你可以到androidmanifest。xml ->应用选项卡->,然后选择你的活动。最后,选择你喜欢的方向。 您可以从众多选项中选择一个。
你可以按照下面的逻辑来防止AsyncTask运行时屏幕自动旋转:
使用getRequestedOrientation()在活动中存储当前屏幕方向。 使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)禁用自动屏幕朝向。 运行/执行AsyncTask。 在AsyncTask结束时,使用setRequestedOrientation(oldOrientation)恢复你之前的方向状态。
请注意,有几种方法可以访问AsyncTask中的Activity(运行在UI线程上)属性。你可以实现你的AsyncTask作为一个内部类,或者你可以使用消息处理程序戳你的活动类。
我发现最简单的方法就是把
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);
}