2010-04-15 11 views
11

मैं अपनी कुछ प्राथमिकताओं को सेटिंग्स ऐप की तरह आइकन रखना चाहता हूं।एंड्रॉइड वरीयताओं में आइकन का उपयोग

मुझे लगता है कि ऐसा करने का एक तरीका सेटिंग ऐप से सभी प्रासंगिक कोड और संसाधनों की प्रतिलिपि बनाना होगा, लेकिन यह कुछ आइकनों के लिए ओवरकिल जैसा लगता है।

इसके अलावा मुझे सेटिंग्स प्रोजेक्ट की आवश्यकता वाले प्रत्येक प्रोजेक्ट में कोड और संसाधनों को डुप्लिकेट करने का विचार पसंद नहीं है।

क्या किसी ने इसे पहले से ही सरल या संसाधन-मुक्त दृष्टिकोण से हल किया है?

+0

मुझे यह नहीं मिला, आप कस्टम लेआउट का उपयोग क्यों नहीं कर सकते? http://developer.android.com/reference/android/preference/Preference.html#setLayoutResource%28int%29 –

उत्तर

9

सेटिंग्स एप्लिकेशन एक निजी कस्टम PreferenceScreen सबक्लास का उपयोग करने के लिए आइकन - IconPreferenceScreen का उपयोग करता है। यह टिप्पणियों सहित 51 लाइनों की कोड है, हालांकि इसे कुछ कस्टम विशेषताओं की भी आवश्यकता है। सबसे आसान विकल्प यह है कि आप इसे अपने प्रोजेक्ट में क्लोन करें, भले ही आपको यह पसंद न हो।

source code

+0

यदि परियोजनाओं के बीच केवल संसाधन साझा किए जा सकते हैं। मुझे आशा है कि किसी ने इसे पहले ही हल कर लिया है और बिना किसी बाहरी संसाधन के इसे एक अच्छी कक्षा में लपेट लिया है। – hpique

+0

यह ध्यान दिया जाना चाहिए कि सेटिंग्स ऐप दृष्टिकोण वरीयता बढ़ाता है, वरीयता स्क्रीन नहीं और यह भी काम करने के लिए एक कस्टम लेआउट की आवश्यकता है। – hpique

+0

संबंधित स्रोत कोड 404 – Shine

5

अपडेट किया गया .... के जवाब दिए और काम कर रहे एक कस्टम लेआउट

उपयोग आइकॉन प्राथमिकता

<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> 

और 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); 
     } 
    } 
} 

के लिए आयातित वर्ग के लिए तो आप बस एक नई आइकन प्रेफरस्क्रीन का उपयोग कर सकते हैं एक वरीयता का, और एक आइकन

+1

सेटिंग ऐप के attrs.xml में जांचें। – hpique

1

एंड्रॉइड 3.x हनीकॉम मानक प्राथमिकताओं में परिभाषित आइकन दिखाता है।

तो शायद आइकन का उपयोग एंड्रॉइड ओएस संस्करण या स्क्रीन आकार पर निर्भर करता है।

+0

यह एंड्रॉइड संस्करण पर निर्भर करता है, ऊपर मेरा जवाब देखें। – keaukraine

7

एपीआई स्तर 11 के बाद से आप प्राथमिकताओं के आइकन जोड़ सकते हैं:

http://developer.android.com/reference/android/preference/Preference.html#setIcon%28int%29

http://developer.android.com/reference/android/preference/Preference.html#attr_android:icon

पुराने Android संस्करणों के लिए, आप कस्टम लेआउट का उपयोग और कोड में छवियों बाध्य करने के लिए है, @ roger- के रूप में एल सुझाव देता है।

संबंधित मुद्दे