2010-04-15 3 views
11

Ich möchte, dass einige meiner Einstellungen Symbole enthalten, wie die App "Einstellungen".Verwenden von Symbolen in den Android-Einstellungen

Ich denke, ein Weg, dies zu tun wäre, den gesamten relevanten Code und Ressourcen aus der Einstellungen App zu kopieren, aber es scheint wie ein Overkill für ein paar Symbole.

Auch mag ich nicht die Idee, den Code und die Ressourcen in jedem Projekt, das Einstellungssymbole erfordert, zu duplizieren.

Hat jemand das schon mit einem einfacheren oder ressourcenfreien Ansatz gelöst?

+0

Ich verstehe es nicht, warum können Sie nicht einfach ein benutzerdefiniertes Layout verwenden? http://developer.android.com/reference/android/preference/Preference.html#setLayoutResource%28int%29 –

Antwort

9

Die Anwendung Einstellungen verwendet eine private benutzerdefinierte PreferenceScreen Unterklasse mit dem Symbol - IconPreferenceScreen. Es sind 51 Codezeilen, einschließlich der Kommentare, obwohl auch einige benutzerdefinierte Attribute erforderlich sind. Die einfachste Option besteht darin, alles in Ihr Projekt zu kopieren, auch wenn Ihnen das nicht gefällt.

source code

+0

Wenn nur Ressourcen zwischen Projekten geteilt werden könnten. Ich habe irgendwie gehofft, dass jemand das schon gelöst hat und es in eine nette Klasse ohne externe Ressourcen eingepackt hat. – hpique

+0

Es ist zu beachten, dass App Approach Einstellungen Preference, nicht PreferenceScreen erweitert und dass es auch ein benutzerdefiniertes Layout benötigt. – hpique

+0

der Quellcode verknüpft gibt eine 404 – Shine

5

aktualisiert .... beantwortet und Arbeits

Verwenden Sie ein benutzerdefiniertes Layout für das Symbol Präferenz

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+android:id/widget_frame" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:gravity="center_vertical" 
    android:paddingRight="?android:attr/scrollbarSize"> 
    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="6dip" 
     android:layout_marginRight="6dip" 
     android:layout_gravity="center" /> 
    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="2dip" 
     android:layout_marginRight="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_alignLeft="@android:id/title" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:maxLines="2" /> 
    </RelativeLayout> 
</LinearLayout> 

und die importierten Klasse für IconPreferenceScreen

public class IconPreferenceScreen extends Preference { 
    private final Drawable mIcon; 
    private static String mType; 

    public IconPreferenceScreen(Context context, AttributeSet attrs, int iconRes) { 
     this(context, attrs, 0, iconRes); 
    } 
    public IconPreferenceScreen(Context context, AttributeSet attrs, 
      int defStyle, int iconRes) { 
     super(context, attrs, defStyle); 
     setLayoutResource(R.layout.preference_icon); 
     mIcon = context.getResources().getDrawable(iconRes); 
    } 
    public IconPreferenceScreen(Context context, int iconRes) { 
     this(context, null, iconRes); 
    } 
    @Override 
    public void onBindView(View view) { 
     super.onBindView(view); 
     ImageView imageView = (ImageView) view.findViewById(R.id.icon); 
     if (imageView != null && mIcon != null) { 
      imageView.setImageDrawable(mIcon); 
     } 
    } 
} 

dann Sie können einfach einen neuen IconPreferenceScreen verwenden einer Präferenz, und fügen Sie ein Symbol hinzu

+1

Check in attrs.xml der Einstellungen App. – hpique

1

Android 3.x Honeycomb zeigt Symbole in Standardeinstellungen definiert.

Also hängt die Verwendung von Symbol wahrscheinlich von Android OS-Version oder Bildschirmgröße.

+0

Es hängt von der Android-Version ab, siehe meine Antwort oben. – keaukraine