问题
将设备从单面纵向 PreferenceScreen
旋转到双面横向 PreferenceScreen
,会导致横向仅显示为单面。当查看标题屏幕时不会发生。
设置
仅适用于ICS及以上版本。我有一个加载了 preference-headers
的 PreferenceActivity
。每个标题都链接到一个 Fragment
,该 Fragment
再加载一个 PreferenceScreen
。相当普通的东西。
细节
一切工作正常,直到我注意到 Android 只会自动切换到两个窗格外观的某些屏幕。经过一些研究,我从 Commonsware 帖子 中了解到,Android 只会在 sw720dp 上这样做。如果你问我,这有点浪费,因为许多设备确实有足够的空间容纳两个窗格。所以我重写了 onIsMultiPane()
方法,在 w600dp 及以上的情况下返回 true。 像魔法一样运作……有点。
对于一个在纵向显示单面并在横向显示双面的设备;在纵向查看标题然后旋转到横向,一切正常。 但是,如果在纵向模式下选择一个标题并加载其后续屏幕,然后旋转到横向,则设备将保持单窗格而不是切换回双窗格。 如果然后返回到标题屏幕,则它将返回到双窗格外观,但不会预选标题。 结果详细窗格保持空白。
这是意料之中的行为吗? 有办法解决吗? 我还尝试过重写 onIsHidingHeaders()
,但那只会导致所有东西都显示为空白屏幕。
代码
Preference Activity:
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;
}
}