2010-09-28 5 views
5

J'ai fait une préférence personnalisé (avec une préférence avec une mise en page personnalisée) qui apparaît dans la liste des préférences d'un PreferenceActivity.Android: préférence Style de

La mise en page est créée en code. Le problème est que la police de TextView créée dans le code est quelque peu différente de la police de préférences standard d'Android.

Donc, la solution serait d'appliquer les attributs de style de préférence android à mon TextView. Les styles respectifs devraient être preferenceScreenStyle ou preferenceStyle (je ne suis pas sûr).

Mon problème est que je ne peux pas comprendre comment lire des attributs de style standard Android, pour que je puisse les mettre dans le code.

Répondre

6

J'ai le même problème, mais je l'ai fixé pour certains appareils mobiles, HTC Saphire et Samsung Galaxy S, mais les problèmes I'have avec mon HTC Desire HD. Vous pouvez voir le style de préférence standard dans android_SDK_resurces/layout/preference.xml. Il y a les marges, les tailles de texte, ....

1

J'ai réussi à résoudre ce problème en remplaçant la ressource de mise en page de préférence personnalisée actuelle avec des ressources de mise en page utilisée par une préférence standard comme par exemple EditTextPreference Voici un exemple de code, notez que TimePreference est la préférence personnalisée.

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

Toutes mes excuses pour la nécro, mais je ne pouvais trouver cette réponse sur une question à propos de style SO de préférence. J'ai finalement trouvé la réponse: la préférence par défaut utilise maintenant le layout/preference_material. Vous pouvez le voir et d'autres mises en page plus spécifiques à la source android here. Copié ci-dessous juste au cas où un lien: les pauses

<?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> 
Questions connexes