java - tareas - pantalla de inicio de windows 10
El botón Inicio de la barra de acción no funciona con la Pantalla de Preferencia anidada (1)
Recientemente tuve este problema y así lo resolví. Primero, para acceder a PreferenceScreen, utilizo exactamente el mismo método que mencionó anteriormente.
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
super.onPreferenceTreeClick(preferenceScreen, preference);
// If the user has clicked on a preference screen, set up the action bar
if (preference instanceof PreferenceScreen) {
initializeActionBar((PreferenceScreen) preference);
}
return false;
}
Desde aquí miré qué es un PreferenceScreen , y me entristeció descubrir que es sólo un envoltorio de un Diálogo. Avanzando, luego configuro las opciones de visualización de la barra de acción e intento encontrar el área del botón de inicio. Lamentablemente, esto no fue tan fácil de obtener, pero con la ayuda del visor de jerarquía logré acceder encontrando el icono de inicio y luego sus vistas principales. Una vez que tenemos acceso al LinearLayout que contiene, podemos adjuntar un onClickListener donde descartamos el cuadro de diálogo PreferenceScreen, que llama onDismissListener de PreferenceScreen y nos devuelve a la pantalla anterior.
/** Sets up the action bar for an {@link PreferenceScreen} */
public static void initializeActionBar(PreferenceScreen preferenceScreen) {
final Dialog dialog = preferenceScreen.getDialog();
if (dialog != null) {
// Inialize the action bar
dialog.getActionBar().setDisplayHomeAsUpEnabled(true);
// Apply custom home button area click listener to close the PreferenceScreen because PreferenceScreens are dialogs which swallow
// events instead of passing to the activity
// Related Issue: https://code.google.com/p/android/issues/detail?id=4611
View homeBtn = dialog.findViewById(android.R.id.home);
if (homeBtn != null) {
OnClickListener dismissDialogClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
};
// Prepare yourselves for some hacky programming
ViewParent homeBtnContainer = homeBtn.getParent();
// The home button is an ImageView inside a FrameLayout
if (homeBtnContainer instanceof FrameLayout) {
ViewGroup containerParent = (ViewGroup) homeBtnContainer.getParent();
if (containerParent instanceof LinearLayout) {
// This view also contains the title text, set the whole view as clickable
((LinearLayout) containerParent).setOnClickListener(dismissDialogClickListener);
} else {
// Just set it on the home button
((FrameLayout) homeBtnContainer).setOnClickListener(dismissDialogClickListener);
}
} else {
// The ''If all else fails'' default case
homeBtn.setOnClickListener(dismissDialogClickListener);
}
}
}
}
Encontré una solución alternativa para habilitar realmente el botón de inicio de la Barra de Acción en la Pantalla de Preferencia anidada ... sin embargo, no llama a OnOptionsItemSelected en mi Actividad de Preferencia. ¿Alguien sabe cómo utilizar realmente el botón de inicio en una pantalla de Preference anidada?
Modificación del puesto 35 aquí:
http://code.google.com/p/android/issues/detail?id=4611
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)
{
super.onPreferenceTreeClick(preferenceScreen, preference);
if (preference!=null)
if (preference instanceof PreferenceScreen)
if (((PreferenceScreen)preference).getDialog()!=null)
((PreferenceScreen)preference).getDialog().getActionBar().setHomeButtonEnabled(true);
return false;
}