管理屏幕方向更改 android

manage screen orientation change android

我有一个 activity 有多个初始化( fragments , sharedpreferences , services , ui components(search bar , buttons etc..)...)我不想重新启动activity 当屏幕方向改变时

我通过 android:configChanges="keyboardHidden|orientation|screenSize" 找到了一个简单(有效的解决方案),但我的技术经理禁止我这样做,因为根据他的说法,这是一种不好的做法

为了正确处理屏幕方向变化,还有哪些其他方法?

非常感谢

我的主要activity

  @AfterViews
    public void afterViews() {
      putSharedPrefs();
      initializeFragments();
      initializeComponents();
      initializeSynchronizeDialog();
      initDownloadDialog();
    }

您可以只为横向模式添加布局。
您只需要在 "res" 目录中添加文件夹 layout-land 并定义 activity 在横向模式下的布局。
注意-保持 xml 文件名与简单布局文件夹中的名称以及您在 activity 中使用的名称相同。它会自动检测您的屏幕方向并相应地应用布局。
编辑1
现在从文本视图保存文本 =) 假设您的文本视图在布局 xml 文件中被命名为 MyTextView。您的 activity 将需要以下内容: 私有文本视图 mTextView; 私人静态最终字符串 KEY_TEXT_VALUE = "textValue";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextView = (TextView) findViewById(R.id.main);
if (savedInstanceState != null) {
  String savedText = savedInstanceState.getString(KEY_TEXT_VALUE);
  mTextView.setText(savedText);
}

@Override
protected void onSaveInstanceState (Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(KEY_TEXT_VALUE, mTextView.getText());
}

基本上,每当 Android 销毁并重新创建您的 Activity 以更改方向时,它会在销毁之前调用 onSaveInstanceState() 并在重新创建之后调用 onCreate() 。无论您在 onSaveInstanceState 中的 bundle 中保存什么,都可以从 onCreate() 参数中取回。

所以你想在 onSaveInstanceState() 中保存文本视图的值,并在 onCreate() 中读取它并填充你的文本视图。如果 activity 是第一次创建(不是由于旋转变化),则 savedInstanceState 在 onCreate() 中将为 null。你也可能不需要 android:freezesText="true"

如果需要,您也可以尝试保存其他变量,因为当 activity 被销毁并重新创建时,您将丢失所有存储的变量。