Проблема
Поворот устройства из одноуровневого портрета PreferenceScreen
в двухпанельный ландшафт PreferenceScreen
, при этом ландшафт будет отображаться только как однослойный. Не происходит при просмотре экрана заголовков.
Настройка
Это касается только ICS и только. У меня есть PreferenceActivity
, который загружает preference-headers
. Каждый заголовок соединяется с Fragment
, который, в свою очередь, загружает PreferenceScreen
. Довольно бег mil.
Подробнее
Все работало хорошо, пока я не заметил, что Android только автоматически переключится на двухпанельный вид определенных экранов. После некоторых исследований я узнал из сообщения Commonsware, что Android будет делать это только для sw720dp. Немного отходов, если вы спросите меня, так как многие устройства Def имеют достаточно места для двух панелей. Поэтому я переопределил метод onIsMultiPane()
, чтобы вернуть true для w600dp и выше. Работал как очарование.... любопытное.
Учитывая устройство, которое будет показывать однослойное изображение в портретном и двойном окне в ландшафте; просмотр заголовков в портрете и поворот на пейзаж, прекрасно работает. Однако, если вы выбираете заголовок и загружаете его последующий экран в портретном режиме, затем поворачивайте в альбомное положение, а устройство останется на одной панели вместо того, чтобы переключиться обратно в двойную панель. Если вы затем перейдете к экрану заголовков, он вернется к двойному окну, за исключением того, что он не будет предварительно выбирать заголовок. В результате подробная панель остается пустой.
Является ли это предполагаемым поведением? В любом случае, чтобы обойти это? Я попытался переопределить 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);
}
}
Заголовок предпочтения Frag:
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;
}
}