2014-11-22 20 views
5

La mia app ha preferenze personalizzate con layout personalizzato e dopo aver provato la mia app su Android 5, ho notato che le mie preferenze personalizzate sembrano diverse (dimensione, colore, riempimento) gli altri. Quindi ho pensato che sarebbe stata una soluzione semplice prendendo semplicemente preference.xml da Android 5 SDK, unendomi alle mie modifiche e posizionando un nuovo layout nella cartella layout-v21. Ha risolto problemi di riempimento e di colore, ma non le dimensioni del titolo che è più grande.La dimensione del carattere del titolo personalizzato è maggiore della preferenza standard in Android 5

La mia preferenza personalizzato costruttore si presenta così:

public SeekBarPreference(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setLayoutResource(R.layout.preference_seekbar); 
} 

preference_seekbar.xml (appena aggiunto SeekBar al layout originale):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:gravity="center_vertical" 
    android:paddingEnd="?android:attr/scrollbarSize" 
    android:background="?android:attr/selectableItemBackground" > 

    <ImageView 
     android:id="@+android:id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     /> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="15dip" 
     android:layout_marginEnd="6dip" 
     android:layout_marginTop="6dip" 
     android:layout_marginBottom="6dip" 
     android:layout_weight="1"> 

     <TextView android:id="@+android:id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:ellipsize="marquee" 
      android:fadingEdge="horizontal" /> 

     <TextView android:id="@+android:id/summary" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@android:id/title" 
      android:layout_alignStart="@android:id/title" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:textColor="?android:attr/textColorSecondary" 
      android:maxLines="4" /> 

     <SeekBar android:id="@+id/seekbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+android:id/title" 
      android:layout_toEndOf="@android:id/summary" 
      android:layout_toStartOf="@android:id/widget_frame"/> 

    </RelativeLayout> 

    <!-- Preference should place its actual preference widget here. --> 
    <LinearLayout android:id="@android:id/widget_frame" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical" 
     android:orientation="vertical" /> 

</LinearLayout> 

Si può notare sopra quel widget titolo ha questo attributo originale : android:textAppearance="?android:attr/textAppearanceLarge" che dovrebbe rendere grande il carattere, ma poi c'è una domanda sul perché la dimensione del font del titolo della preferenza standard è minore se usa lo stesso layout (solo senza barra di ricerca)?

risposta

1

Se avessi lo stesso problema, ha trovato il solution here.

Anche se ho utilizzato TextView per il titolo TextView, sembra più adatto a me.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:gravity="center_vertical" 
    android:paddingStart="?attr/listPreferredItemPaddingStart" 
    android:paddingEnd="?attr/listPreferredItemPaddingEnd"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:minWidth="@dimen/preference_icon_minWidth" 
     android:orientation="horizontal"> 
     <ImageView 
      android:id="@+android:id/icon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:minWidth="48dp" 
      /> 
    </LinearLayout> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="16dip" 
     android:layout_marginEnd="8dip" 
     android:layout_marginTop="6dip" 
     android:layout_marginBottom="6dip" 
     android:layout_weight="1"> 

     <TextView android:id="@+android:id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:ellipsize="marquee" 
      android:fadingEdge="horizontal" /> 

     <TextView android:id="@+android:id/summary" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@android:id/title" 
      android:layout_alignStart="@android:id/title" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:textColor="?android:attr/textColorSecondary" 
      android:maxLines="4" /> 

     <!-- Preference should place its actual preference widget here. --> 
     <LinearLayout android:id="@+android:id/widget_frame" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_below="@android:id/summary" 
      android:layout_alignStart="@android:id/title" 
      android:minWidth="@dimen/preference_widget_width" 
      android:gravity="center" 
      android:orientation="vertical" /> 

     <SeekBar android:id="@+android:id/seekbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@android:id/summary" 
      android:layout_toEndOf="@android:id/widget_frame" 
      android:layout_alignParentEnd="true" /> 

    </RelativeLayout> 

</LinearLayout> 
+0

Questo funziona per me. Dovresti cambiarlo anche nel tuo codice, è stato un po 'confuso. –

Problemi correlati