管理屏幕方向改变android

时间:2015-03-10 17:02:53

标签: android screen-orientation

我有一个带有多次初始化的活动(片段,共享偏好,服务,ui组件(搜索栏,按钮等)...)并且我不希望在屏幕方向改变时重新启动活动

我使用android:configChanges="keyboardHidden|orientation|screenSize"找到了一个简单(可行的解决方案),但我的技术经理以这种方式禁止我,因为据他说这是一个不好的做法

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

非常感谢

我的主要活动

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

1 个答案:

答案 0 :(得分:5)

您只需为横向模式添加布局即可 您只需要在" res"中添加文件夹 layout-land 。目录并定义您的活动在横向模式下的外观布局 注意 -Keep xml文件名与简单布局文件夹中的名称相同,并且您在活动中使用该名称。它会自动检测您的屏幕方向并相应地应用布局 的 EDIT1
现在从文本视图中保存文本=)让我们假设您的textview在布局xml文件中命名为MyTextView。您的活动需要以下内容:     private TextView mTextView; private static final String 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的包中保存什么,你都可以从onCreate()参数返回。

因此,您希望在onSaveInstanceState()中保存文本视图的值,并读取它并在onCreate()中填充textview。如果第一次创建活动(不是由于旋转更改),则onCreate()中的savedInstanceState将为null。你也可能不需要android:freezesText =" true"

如果需要,您还可以尝试保存其他变量,因为在销毁和重新创建活动时,您将丢失存储的所有变量。