管理屏幕方向改变android

ulq*_*rra 0 android screen-orientation

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

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

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

非常感谢你

我的主要活动

  @AfterViews
    public void afterViews() {
      putSharedPrefs();
      initializeFragments();
      initializeComponents();
      initializeSynchronizeDialog();
      initDownloadDialog();
    }
Run Code Online (Sandbox Code Playgroud)

Kun*_*nal 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());
}
Run Code Online (Sandbox Code Playgroud)

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

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

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