PreferenceFragment中的ActionBar不会重新计算高度和字体大小

jyo*_*Pro 10 android android-appcompat preferenceactivity android-orientation android-actionbar

使用最新的AppCompat-v21库,我曾经ActionBarActivity创建和填充PreferenceFragment.但是,ActionBar当方向或屏幕大小改变时,似乎不会改变高度和文本大小.对其他活动进行测试,这种行为似乎只发生在PreferenceActivity(与此处提出的问题相反:ActionBar容量/溢出不会改变方向变化).

首先,为了处理方向的变化,我加入android:configChanges="keyboard|keyboardHidden|orientation|screenSize"了Manifest.我怀疑这是造成这个问题的主要原因,但正如我之前提到的,这适用于其他问题Activity.

以下是一些解释此问题的屏幕截图:

PreferenceActivity以纵向模式启动:

肖像开始

从肖像旋转到风景:

旋转到风景

PreferenceActivity以横向模式启动:

景观

从风景旋转到肖像:

旋转到肖像

附加信息

这是PreferenceActivity班级:

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;

public class PrefsActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit();
    }

}
Run Code Online (Sandbox Code Playgroud)

这种行为是个错误吗?如果没有,是否有解决方法或修复?


编辑我

我尝试使用新的ToolBar小部件,但没有运气.

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;

public class PrefsActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_preference);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_pref);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        getFragmentManager().beginTransaction().replace(R.id.pref_frame, new PrefsFragment()).commit();
    }

}
Run Code Online (Sandbox Code Playgroud)

jyo*_*Pro 3

android:configChanges不推荐,因为方向、键盘并不是 Activity 重新创建的唯一原因。

因此,更好的方法是从清单中删除它,并在类setRetainInstance(true);上设置Fragment。这将绕过片段的销毁和重新创建循环,同时刷新活动。

由于Toolbar包含在 Activity 中而不是 Fragment 中,因此这将刷新工具栏,同时保留 Fragment。

对于对话框,可以使用片段生命周期来关闭/重新打开它们。

来源:http ://developer.android.com/guide/topics/resources/runtime-changes.html