6

he visto algo como esto:El campo de resumen de la etiqueta PreferenceCategory

<PreferenceCategory xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="vegi_category" android:title="Vegetables" 

    android:summary="Preferences related to vegetable"> <!-- Why is this here? --> 

    <CheckBoxPreference android:key="tomato_selection_pref" 
     android:title="Tomato " android:summary="It's actually a fruit" /> 
    <CheckBoxPreference android:key="potato_selection_pref" 
     android:title="Potato" android:summary="My favorite vegetable" /> 
</PreferenceCategory> 

Pero no entiendo por qué hay un campo de resumen para la categoría pref:

(android:summary="Preferences related to vegetable")?

Cuando uso la pantalla pref el resumen se presenta en la vista, pero este no es un caso con la categoría pref. ¿Se puede ver de algún modo la existencia del resumen en la categoría pref simplemente como una convención de esto?

¿Cuál es el uso real del resumen en el elemento de categoría pref?

Respuesta

9

El widget PreferenceCategory estándar muestra solo el título; el atributo android:summary se ignora.

Eso es debido a que el diseño predeterminado (preference_category.xml) contiene sólo un único Vista de Texto para el campo de título:

<!-- Layout used for PreferenceCategory in a PreferenceActivity. --> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    style="?android:attr/listSeparatorTextViewStyle" 
    android:id="@+android:id/title" 
/> 

Si desea mostrar el resumen así, puede especificar su propio diseño utilizando el atributo android:layout. Por ejemplo:

<PreferenceCategory android:title="Category" android:summary="This is the summary" 
        android:layout="@layout/preference_category_summary"> 

Dónde diseño/preference_category_summary.xml es algo así como:

<!-- Layout used for PreferenceCategory + SUMMARY in a PreferenceActivity. --> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" android:layout_height="wrap_content" 
       android:orientation="vertical"> 
    <TextView android:id="@+android:id/title" 
       style="?android:attr/listSeparatorTextViewStyle"/> 
    <TextView android:id="@+android:id/summary" 
       android:paddingLeft="5dip" android:paddingRight="dip" 
       android:layout_width="match_parent" android:layout_height="wrap_content"/> 
</LinearLayout> 

Antes de seguir adelante y hacer esto, sin embargo, debe tener en cuenta si se trata de más o menos confuso para el usuario. A menos que aplique un estilo al texto resumido, saltará de la pantalla o parecerá que se adjunta a la primera preferencia en la categoría.

7

Podrías usar Preference y android: summary.

<PreferenceCategory xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="vegi_category" android:title="Vegetables"> 

    <Preference android:summary="Preferences related to vegetable" /> 

    <CheckBoxPreference android:key="tomato_selection_pref" 
     android:title="Tomato " android:summary="It's actually a fruit" /> 
    <CheckBoxPreference android:key="potato_selection_pref" 
     android:title="Potato" android:summary="My favorite vegetable" /> 
</PreferenceCategory> 
+0

esto funciona. pero el rendimiento no es muy bueno –

+0

Me parece que esto funciona muy bien (en comparación con cambiar el diseño, ya que debe coincidir con la apariencia de la versión de Android también). Además, si agrega 'android: seleccionable = falso', puede lograr una apariencia similar. –

0

@ehartwell tiene toda la razón
mis diseños para las versiones diff son:

para pre-lollipop

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <TextView android:id="@android:id/title" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="6dp" 
    android:textSize="14sp" 
    android:textStyle="bold" 
    android:textAllCaps="true" 
    android:paddingLeft="8dp" 
    android:paddingRight="8dp"/> 

    <TextView android:id="@android:id/summary" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="-5dp" 
    android:textSize="12sp" 
    style="?android:attr/listSeparatorTextViewStyle"/> 

</LinearLayout> 

para la post-lollipop

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="@dimen/preference_category_margin" 
    android:paddingRight="@dimen/preference_category_margin" 
    android:orientation="vertical"> 

    <TextView android:id="@android:id/title" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="6dp" 
    android:textStyle="bold" 
    android:textSize="13sp" 
    android:textAllCaps="false" 
    android:textColor="@color/colorAccent"/> 

    <TextView android:id="@android:id/summary" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textSize="12sp" 
    android:textColor="@color/colorAccent" 
    android:textAllCaps="false"/> 

</LinearLayout> 

@ dimen/preference_category_margin se diff para el tamaño de pantalla especial
16DP o 24dp
y son bastante bien :)

Cuestiones relacionadas