HardBirch

自定义带图标的Preferecnce—–类ListPreference实现(1)

时间:11-08-04 栏目:安卓源码解析与小应用 作者:张飞不张,文采横飞 评论:0 点击: 3,561 次

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

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

<?xml version="1.0" encoding="utf-8"?>
<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">
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="18dip"
        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>
    <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" />
</LinearLayout> 

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


import com.android.mms.R;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;

public class IconListPreference extends Preference{
private Drawable mIcon;

    public IconListPreference(final Context context, final AttributeSet attrs, final int defStyle) {
        super(context, attrs);

        this.setLayoutResource(R.layout.icon_list_preference);

        //这里设置的是icon初始化的图标
        this.mIcon = context.getResources().getDrawable(R.drawable.ycz20_black);
    }

    public IconListPreference(final Context context, final AttributeSet attrs) {
        this(context, attrs, 0);
    }

    @Override
    protected void onBindView(final View view) {
        super.onBindView(view);
        final ImageView imageView = (ImageView)view.findViewById(R.id.icon);
        if ((imageView != null) && (this.mIcon != null)) {
            imageView.setImageDrawable(this.mIcon);
        }
    }

    /**
* Sets the icon for this Preference with a Drawable.
*
* @param icon The icon for this Preference
*/
    public void setIcon(final Drawable icon) {
        if (((icon == null) && (this.mIcon != null)) || ((icon != null) && (!icon.equals(this.mIcon)))) {
            this.mIcon = icon;
            this.notifyChanged();
        }
    }
    public void setIcon(int iconRes) {
        if(R.drawable.ycz20_black!=iconRes){
            this.mIcon = getContext().getResources().getDrawable(iconRes);
            this.notifyChanged();
        }
    }
    /**
* Returns the icon of this Preference.
*
* @return The icon.
* @see #setIcon(Drawable)
*/
    public Drawable getIcon() {
        return this.mIcon;
    }
}


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

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

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

自定义带图标的Preferecnce—–类ListPreference实现(1):目前有

  1. 7楼
    jdc0109:

    very good, come on!

    2011-12-08 14:14 [回复]
  2. [reply]jdc0109[/reply]
    呵呵 对你有用就好。。。

    2011-12-10 22:53 [回复]
  3. 5楼
    jamin0107:

    求程序截图。。。

    2011-12-12 10:28 [回复]
  4. [reply]jamin0107[/reply]
    哈哈 等一会。。。

    2011-12-12 10:34 [回复]
  5. 地板
    g13422:

    good,顶一下

    2012-02-17 17:50 [回复]
  6. 板凳
    fengbing2013:

    求源码- -
    shaodong2013@163.com

    2012-08-15 11:04 [回复]
  7. [reply]fengbing2013[/reply]
    在下一篇里面 就有。。。。

    2012-08-15 11:07 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐