zoukankan      html  css  js  c++  java
  • 自定义带图标的Preferecnce-----类ListPreference实现(1)

    有时候系统提供给我们的preference并不能满足我们的要求,所以有的时候需要我们自定义Preferece,下面的例子就是我个人自定义的一个简单的带图标的Preference。 

                 首先是xml布局文件,就是你想实现的布局。

    [java] view plaincopy
     
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:id="@+android:id/widget_frame"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="wrap_content"  
    6.     android:minHeight="?android:attr/listPreferredItemHeight"  
    7.     android:gravity="center_vertical"  
    8.     android:paddingRight="?android:attr/scrollbarSize">     
    9.     <RelativeLayout  
    10.         android:layout_width="wrap_content"  
    11.         android:layout_height="wrap_content"  
    12.         android:layout_marginLeft="18dip"  
    13.         android:layout_marginRight="6dip"  
    14.         android:layout_marginTop="6dip"  
    15.         android:layout_marginBottom="6dip"  
    16.         android:layout_weight="1">  
    17.         <TextView  
    18.          android:id="@+android:id/title"  
    19.             android:layout_width="wrap_content"  
    20.             android:layout_height="wrap_content"  
    21.             android:singleLine="true"  
    22.             android:textAppearance="?android:attr/textAppearanceLarge"  
    23.             android:ellipsize="marquee"  
    24.             android:fadingEdge="horizontal" />  
    25.         <TextView  
    26.          android:id="@+android:id/summary"  
    27.             android:layout_width="wrap_content"  
    28.             android:layout_height="wrap_content"  
    29.             android:layout_below="@android:id/title"  
    30.             android:layout_alignLeft="@android:id/title"  
    31.             android:textAppearance="?android:attr/textAppearanceSmall"  
    32.             android:maxLines="2" />  
    33.     </RelativeLayout>  
    34.     <ImageView  
    35.         android:id="@+id/icon"  
    36.         android:layout_width="wrap_content"  
    37.         android:layout_height="wrap_content"  
    38.         android:layout_marginLeft="6dip"  
    39.         android:layout_marginRight="6dip"  
    40.         android:layout_gravity="center" />  
    41. </LinearLayout>   



    下面是自定义的preference的java文件:

    [java] view plaincopy
     
    1. import com.android.mms.R;  
    2.   
    3. import android.content.Context;  
    4. import android.graphics.drawable.Drawable;  
    5. import android.preference.Preference;  
    6. import android.util.AttributeSet;  
    7. import android.view.View;  
    8. import android.widget.ImageView;  
    9.   
    10. public class IconListPreference extends Preference{  
    11. private Drawable mIcon;  
    12.       
    13.     public IconListPreference(final Context context, final AttributeSet attrs, final int defStyle) {  
    14.         super(context, attrs);  
    15.           
    16.         this.setLayoutResource(R.layout.icon_list_preference);  
    17.   
    18.         //这里设置的是icon初始化的图标  
    19.         this.mIcon = context.getResources().getDrawable(R.drawable.ycz20_black);  
    20.     }  
    21.   
    22.     public IconListPreference(final Context context, final AttributeSet attrs) {  
    23.         this(context, attrs, 0);  
    24.     }  
    25.   
    26.     @Override  
    27.     protected void onBindView(final View view) {  
    28.         super.onBindView(view);  
    29.         final ImageView imageView = (ImageView)view.findViewById(R.id.icon);  
    30.         if ((imageView != null) && (this.mIcon != null)) {  
    31.             imageView.setImageDrawable(this.mIcon);  
    32.         }  
    33.     }  
    34.   
    35.     /** 
    36. * Sets the icon for this Preference with a Drawable. 
    37. * @param icon The icon for this Preference 
    38. */  
    39.     public void setIcon(final Drawable icon) {  
    40.         if (((icon == null) && (this.mIcon != null)) || ((icon != null) && (!icon.equals(this.mIcon)))) {  
    41.             this.mIcon = icon;  
    42.             this.notifyChanged();  
    43.         }  
    44.     }  
    45.     public void setIcon(int iconRes) {  
    46.         if(R.drawable.ycz20_black!=iconRes){  
    47.             this.mIcon = getContext().getResources().getDrawable(iconRes);  
    48.             this.notifyChanged();  
    49.         }  
    50.     }  
    51.     /** 
    52. * Returns the icon of this Preference. 
    53. * @return The icon. 
    54. * @see #setIcon(Drawable) 
    55. */  
    56.     public Drawable getIcon() {  
    57.         return this.mIcon;  
    58.     }  
    59. }  



    比如你想更改ImageView里面的图标,就是以使用setIcon()方法。

    因为自己完成的功能比较简单,所以重写的方法就比较少,大家 可以根据自己的需要来添加更多的方法。

    而只是实现了一个Preferecnce,但是如何实现一个类似ListPreference类似的功能,但是比ListPreference更绚丽的效果呢?请看下一篇!

  • 相关阅读:
    iOS URL中汉字的编码和解码
    指针函数和函数指针
    面试题1:赋值运算符函数
    线程安全的单实例模式
    大数相加
    网格走法
    stringstream字符串流的妙用
    判断一棵二叉树是否为二叉排序树
    idea 从javadoc中复制内容出来
    idea开启jquery提示及如何找到学习目标
  • 原文地址:https://www.cnblogs.com/kevincode/p/3838567.html
Copyright © 2011-2022 走看看