2010-09-28 18 views
5

Ho effettuato una preferenza personalizzata (ad esempio una preferenza con un layout personalizzato) che viene visualizzata nell'elenco delle preferenze di un PreferenceActivity.Android: stile preferenza

Il layout è stato creato in codice. Il problema è che il carattere del TextView creato nel codice ha un aspetto leggermente diverso rispetto al carattere di preferenza standard di Android.

Quindi la soluzione sarebbe applicare gli attributi di stile delle preferenze di Android al mio TextView. I rispettivi stili dovrebbero essere preferenceScreenStyle o preferenceStyle (non sono sicuro).

Il mio problema è che non riesco a capire come leggere gli attributi di stile standard di Android, così ho potuto impostarli in codice.

risposta

6

Ho lo stesso problema, ma ho risolto per alcuni dispositivi mobili, HTC Saphire e Samsung Galaxy S, ma ho problemi con il mio HTC Desire HD. Puoi vedere lo stile di preferenza standard in android_SDK_resurces/layout/preference.xml. Ci sono margini, dimensioni del testo, ...

1

Sono riuscito a risolvere questo sostituendo la risorsa di layout della preferenza personalizzata corrente con la risorsa di layout utilizzata da una preferenza standard come EditTextPreference ad es. Ecco un esempio di codice, nota che TimePreference è la preferenza personalizzata.

TimePreference wake_time = (TimePreference)findPreference("wake_time"); 
    EditTextPreference exercise = (EditTextPreference)findPreference("exercise"); 
    int r = exercise.getLayoutResource(); 
    wake_time.setLayoutResource(r); 
3

scuse per il necro, ma non ero in grado di trovare questa risposta su qualsiasi SO domanda circa preferenza styling. Ho finalmente trovato la risposta: la preferenza predefinita ora utilizza lo layout/preference_material. Puoi vederlo e altri layout più specifici sulla fonte Android here. Copiato di seguito solo in caso di interruzione di collegamento:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Copyright (C) 2014 The Android Open Source Project 
    Licensed under the Apache License, Version 2.0 (the "License"); 
    you may not use this file except in compliance with the License. 
    You may obtain a copy of the License at 
      http://www.apache.org/licenses/LICENSE-2.0 
    Unless required by applicable law or agreed to in writing, software 
    distributed under the License is distributed on an "AS IS" BASIS, 
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    See the License for the specific language governing permissions and 
    limitations under the License. 
--> 
<!-- Layout for a Preference in a PreferenceActivity. The 
    Preference is able to place a specific widget for its particular 
    type in the "widget_frame" layout. --> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/listPreferredItemHeightSmall" 
    android:gravity="center_vertical" 
    android:paddingStart="?attr/listPreferredItemPaddingStart" 
    android:paddingEnd="?attr/listPreferredItemPaddingEnd" 
    android:background="?attr/activatedBackgroundIndicator" 
    android:clipToPadding="false"> 
    <LinearLayout 
     android:id="@+id/icon_frame" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="-4dp" 
     android:minWidth="60dp" 
     android:gravity="start|center_vertical" 
     android:orientation="horizontal" 
     android:paddingEnd="12dp" 
     android:paddingTop="4dp" 
     android:paddingBottom="4dp"> 
     <com.android.internal.widget.PreferenceImageView 
      android:id="@+id/icon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:maxWidth="48dp" 
      android:maxHeight="48dp" /> 
    </LinearLayout> 
    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:paddingTop="16dp" 
     android:paddingBottom="16dp"> 
     <TextView android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:textAppearance="?attr/textAppearanceListItem" 
      android:ellipsize="marquee" /> 
     <TextView android:id="@+id/summary" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/title" 
      android:layout_alignStart="@id/title" 
      android:textAppearance="?attr/textAppearanceListItemSecondary" 
      android:textColor="?attr/textColorSecondary" 
      android:maxLines="10" 
      android:ellipsize="end" /> 
    </RelativeLayout> 
    <!-- Preference should place its actual preference widget here. --> 
    <LinearLayout android:id="@+id/widget_frame" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="end|center_vertical" 
     android:paddingStart="16dp" 
     android:orientation="vertical" /> 
</LinearLayout> 
Problemi correlati