Android应用程序方向更改重新启动活动
我有一个活动,每当方向改变,它就会重新启动。我编写了代码,以防止在清单文件中的方向发生更改时重新启动活动,如下所示:Android应用程序方向更改重新启动活动,android,Android,我有一个活动,每当方向改变,它就会重新启动。我编写了代码,以防止在清单文件中的方向发生更改时重新启动活动,如下所示: <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity an
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.sample.appname.MainActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
在上面的代码片段中,android:configChanges=“orientation | keyboardHidden”应该为我完成这项工作,但活动仍在重新启动。请告诉我如何更正。实际上,您不应该阻止活动重新启动。出于多种原因,在旋转更改后有必要重新创建活动。其中之一是布局必须膨胀,以应对变化的屏幕大小和诸如此类的事情(很容易想象,纵向布局与横向模式完全不同)。 但是,有一种方法可以告诉系统您自己处理屏幕更改。因此,请更改清单中的行
android:configChanges="orientation|keyboardHidden"
到
此时将不会重新创建该活动。您将通过该方法获得一个回调,以便在方向发生更改时可以执行某些操作。如果您不想在配置发生更改时执行任何操作,请不要覆盖活动中的onConfigurationMethod()
。阅读了解更多信息
这是我从你那里得到的。答案中还有两种方法,但我认为我上面描述的方法是最好的
编辑:可能您还必须将键盘|键盘隐藏
添加到android:configChanges
属性中,如中所述
编辑#2:如果要检索可调用设备的当前方向
Activity.getResources().getConfiguration().orientation
它将返回常量方向\纵向
或方向\横向
如果您对确切的旋转角度感兴趣,请使用
int rotation = getWindowManager().getDefaultDisplay().getRotation();
并使用类似于描述的开关盒的东西实现差异化
第三种确定设备旋转的方法是getRequestedOrientation()
,它将返回在android:configChanges=“orientation | screenSize”中定义的常量,这意味着无论何时更改屏幕方向,都将调用Activity类中的以下方法
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { body }
}
这就是ANDROID的本质,每当屏幕方向改变时,整个活动生命周期都会再次运行
保存和恢复一些数据。您可以使用以下方法
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putString("key","value");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
String s = savedInstanceState.getString("key");
}
试着改变
android:configChanges="orientation|keyboardHidden"
进入
这应该可以解决您的问题,但这不是一种有效的方法,要获得更好的选择,请参阅,除非您有很好的理由这样做,否则不应尝试阻止重新创建活动。相反,您应该正确管理您的活动状态,并将任何必要的状态保存在
onSaveInstanceState()
中,然后使用onCreate()
中提供的捆绑包来适当地恢复状态。我们是否可以确定onCreate事件中的方向是否已更改?@Makeindia我已经更新了答案,我希望这有帮助。如果它有助于你解决问题,请随意接受它
android:configChanges="orientation|keyboardHidden"
android:configChanges="orientation|screenSize"