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)
android:configChanges不推荐,因为方向、键盘并不是 Activity 重新创建的唯一原因。
因此,更好的方法是从清单中删除它,并在类setRetainInstance(true);上设置Fragment。这将绕过片段的销毁和重新创建循环,同时刷新活动。
由于Toolbar包含在 Activity 中而不是 Fragment 中,因此这将刷新工具栏,同时保留 Fragment。
对于对话框,可以使用片段生命周期来关闭/重新打开它们。
来源:http ://developer.android.com/guide/topics/resources/runtime-changes.html