Problema
Rotazione un dispositivo da un ritratto di un riquadro PreferenceScreen
ad un paesaggio due pannelli PreferenceScreen
, provoca paesaggio per mostrare solo come un riquadro. NON si verifica quando si visualizza la schermata delle intestazioni.Problemi con doppio riquadro schermi privilegiate
Impostazione
Questo è solo per ICS e solo. Ho un PreferenceActivity
che carica preference-headers
. Ogni intestazione collega con un Fragment
, che a sua volta carica un PreferenceScreen
. Bella corsa di mil.
dettagli
Tutto ha funzionato bene fino a quando ho notato che Android sarà solo auto-switch ad uno sguardo a due pannelli per alcune schermate. Dopo alcune ricerche ho appreso da uno Commonsware post che Android lo farà solo per sw720dp. Un po 'di spreco se me lo chiedi dato che molti dispositivi def hanno molto spazio per due riquadri. Quindi ho eseguito l'override del metodo onIsMultiPane()
per restituire true per w600dp e versioni successive. Ha funzionato come un fascino .... kinda.
Dato un dispositivo che mostra un riquadro singolo in verticale e doppio riquadro in orizzontale; visualizzare le intestazioni in verticale e ruotarle in orizzontale, funziona bene. Tuttavia, se si seleziona un'intestazione e si carica la schermata successiva in modalità verticale, ruotare in orizzontale per far sì che il dispositivo rimanga un riquadro singolo anziché tornare al doppio pannello. Se torni indietro alla schermata delle intestazioni, tornerà a un doppio riquadro, tranne che non pre-selezionerà un'intestazione. Di conseguenza il riquadro dettagliato rimane vuoto.
È questo comportamento previsto? Ad ogni modo per aggirarlo? Ho provato a sovrascrivere anche lo onIsHidingHeaders()
ma questo ha solo causato il tutto per mostrare una schermata vuota.
Codice
Preferenze attività:
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);
}
}
una preferenza intestazione 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;
}
}
cosa "dire" una prospettiva di debug? –
Hai un valore che contiene lo stato "visibile" intendo. –
PreferenceActivity gestisce i cambiamenti di visibilità. In particolare, non sto alterando nulla di tutto ciò. Il codice sopra è letteralmente tutto ciò che sto facendo. –