【发布时间】:2013-08-10 21:51:22
【问题描述】:
问题
将设备从单窗格纵向PreferenceScreen 旋转到两窗格横向PreferenceScreen,会导致横向仅显示为单窗格。查看标题屏幕时不会发生。
设置
这仅适用于 ICS 及更高版本。我有一个PreferenceActivity,它加载了preference-headers。每个标头都与Fragment 链接,后者又会加载PreferenceScreen。千篇一律。
详情
一切都很顺利,直到我注意到 Android 只会自动切换到某些屏幕的两窗格外观。经过一些研究,我从Commonsware post 了解到,Android 只会对 sw720dp 这样做。如果你问我有点浪费,因为许多设备 def 有足够的空间容纳两个窗格。所以我重写了onIsMultiPane() 方法,为w600dp 及更高版本返回true。像魅力一样工作....有点。
给定一个将在纵向显示单窗格并在横向显示双窗格的设备;以纵向查看标题并旋转到横向,效果很好。但是,如果选择一个标题并以纵向模式加载它的后续屏幕,然后旋转到横向,设备将保持单窗格而不是切换回双窗格。如果您然后返回导航到标题屏幕,它将返回双窗格外观,但不会预先选择标题。因此,详细窗格保持空白。
这是预期的行为吗?无论如何要解决它?我也尝试过覆盖onIsHidingHeaders(),但这只会导致所有内容都显示为空白屏幕。
代码
偏好活动:
public class SettingsActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
loadHeadersFromResource(R.xml.preference, target);
}
@Override
public boolean onIsMultiPane() {
return getResources().getBoolean(R.bool.pref_prefer_dual_pane);
}
}
首选项标头片段:
public class ExpansionsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_expansions);
}
public static ExpansionsFragment newInstance() {
ExpansionsFragment frag = new ExpansionsFragment();
return frag;
}
}
【问题讨论】:
-
什么“说”调试视角?
-
你有一个包含状态“可见”的值,我的意思是。
-
PreferenceActivity 处理可见性变化。我特别没有改变任何一个。上面的代码就是我所做的一切。
-
您是否试图通过在清单中使用它来避免活动破坏和重新创建:android:configChanges="orientation|keyboardHidden"?如果是这样,那么这可能是原因。我怀疑这是因为当你改变方向时,Android 应该从头开始重建你的活动,但它似乎不在这里。我猜这只是需要检查的东西。
-
不。我没有覆盖配置更改。考虑到缺乏答案,我只是选择正常使用偏好。
标签: java android android-fragments android-preferences preferenceactivity