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.

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) ;

  • ¿Cómo mostrar y ocultar las preferencias en Android dinámicamente?
  • Cómo guardar estructuras complejas en preferencias compartidas
  • ¿Cómo agregar un botón a una PreferenceScreen?
  • Preferencias de Android spinner
  • ¿Cuál es el tamaño máximo de un valor de preferencia compartida de Android?
  • Agregar elementos a ListPreference en tiempo de ejecución
  • ¿Cómo abrir o simular un clic en una preferencia de Android, creado con XML, mediante programación?
  • Cómo agregar un botón a PreferenceScreen
  • SetDisplayHomeAsUpEnabled () no funciona en PreferenceActivity
  • ¿Cómo obtengo la categoría de una preferencia de Android?
  • ¿Cómo abrir o simular clic en android ListPreference, que es dentro de la categoría de preferencia?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.