Cómo administrar divisores en un PreferenceFragment?

Comencé a tratar con las preferencias en un PreferenceFragment . Esto es lo que tengo:

mis preferencias

Estoy tratando de:

  1. Deshacerse de los divisores entre los elementos. Supongo que esto se puede definir de estilos, pero no puedo entender cómo. Intenté conseguir la preferencia ListView en el tiempo de ejecución llamando a findViewById(android.R.id.list) , como he leído en alguna parte, pero devuelve null.

  2. Fije los divisores nuevos, completos de la anchura a la derecha encima de los cabeceros, según lo visto aquí . Por ejemplo, en este caso quiero un divisor de ancho completo justo encima de "Statistiche", pero no sobre "Generali" que está en la parte superior de la lista.

La única manera que viene a mi mente es establecer divisores como preferencias falsas, como con:

 <Preference android:layout="@layout/divider" //here I set width and a divider resource /> <PreferenceCategory ... /> 

El principal problema aquí es que mi PreferenceFragment (o la ActionBarActivity que está en) tiene algún relleno izquierdo / derecho, que hacen que cualquier divisor que agrego a preferences.xml no cubren el ancho completo.

Así que mi pregunta es:

  • ¿Cómo puedo deshacerme de los separadores por defecto, item-item que puedes ver en la imagen?

  • ¿Cómo puedo establecer divisores de ancho completo justo encima de los encabezados, o cómo puedo deshacerme del relleno interno de fragmento / actividad? Por supuesto mi disposición de la actividad no tiene (explícito) relleno cualesquiera.

5 Solutions collect form web for “Cómo administrar divisores en un PreferenceFragment?”

Agregue este código en el PreferenceFragment :

  @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // remove dividers View rootView = getView(); ListView list = (ListView) rootView.findViewById(android.R.id.list); list.setDivider(null); } 

Se había olvidado totalmente de esta pregunta, publicará una respuesta ahora para ayudar a los demás. onResume() moviendo mi código en el método onResume() de la actividad que aloja mi PreferenceFragment . Creo que hay varios otros puntos en los que puede recordar un ListView no nulo utilizando findViewById(android.R.id.list) .

 public boolean mListStyled; @Override public void onResume() { super.onResume(); if (!mListStyled) { View rootView = getView(); if (rootView != null) { ListView list = (ListView) rootView.findViewById(android.R.id.list); list.setPadding(0, 0, 0, 0); list.setDivider(null); //any other styling call mListStyled = true; } } } 

Probablemente puede deshacerse de la comprobación rootView , pero al mismo tiempo puede incluso querer comprobar la list != null . De todas maneras, no enfrenté a NPE de esta manera.

Por lo tanto, setDivider(null) quita los divisores item-item. Me las arreglé para añadir divisores de sección que cubren todo el ancho de la pantalla por:

  • Quitar el relleno de la list ;
  • Añadir una preferencia personalizada en mi XML:

norte

  <Preference android:title="divider" android:selectable="false" android:layout="@layout/preference_divider"/> 

Aunque un poco tarde estoy teniendo los mismos problemas con divisores en preff pantalla y encontré esta solución: Establecer estilo personalizado a la actividad de alojamiento y añadir al estilo:

  <item name="android:listDivider">@null</item> 

Realmente hace lo mismo que establecer el código de canal, pero se guarda un findById y creo que se ve más claro conjunto de estilos de canal

Para PreferenceFragmentCompat, ListView no funciona. Pero esto funciona como un encanto:

 <style name="PrefsTheme" parent="PreferenceThemeOverlay.v14.Material"> <item name="android:divider">@null</item> <item name="android:dividerHeight">0dp</item> </style> 

Agrega esto al tema de tu aplicación:

 <item name="preferenceTheme">@style/PrefsTheme</item> 

Si utiliza un PreferenceFragment, puede utilizar ListView. setDivider(null) ; Si utiliza un PreferenceFragmentCompat, puede utilizar PreferenceFragmentCompat. setDivider(Drawable divider) o setDividerHeight(int height) ;

  • Una manera fácil de hacer la elección múltiple ListPreference en Android?
  • Cómo cambiar el color del divisor PreferenceCategory en PreferenceScreen
  • Eliminar la pantalla de preferencias actuales y volver a la pantalla de preferencias principales
  • Cómo utilizar support.v7.preference con AppCompat y posibles inconvenientes
  • Acceso a un listview de PreferenceFragment
  • Cómo envolver el título de preferencia?
  • Activar y desactivar una preferencia
  • Android: SharedPreference: Los valores predeterminados no se establecen en el inicio
  • ¿Cómo detectar si se hicieron cambios en las preferencias?
  • Android cambia el color de fondo para el fragmento de preferencia
  • ¿Cómo puedo copiar SharedPreferences a una tarjeta SD?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.