现在的位置: 首页 > 综合 > 正文

建立自己的TextView和ImageView的组合View类

2012年12月30日 ⁄ 综合 ⁄ 共 3914字 ⁄ 字号 评论关闭

在编写Android应用程序时,很多时候都需要自己来扩张Android的view类。 这里介绍一个最基本的扩展View类:利用TextView和ImageView组合成我们自己的IconTextView类。

 

第一步:我们必须先创建一个包含了有String mText 和 Drawable mIcon数据成员的类,并且该类中应包含有对这两个数据成员进行Set和Get的成员函数。

package hi.braincol.local.filebrowser.icontextlist;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import android.graphics.drawable.Drawable;

//IconText类,该类中主要有两个数据成员:String mText 和 Drawable mIcon。

//并实现了泛型接口Comparable<?>,实现这个接口的目的是为了

//让类似于"List<IconText> Entries = new ArrayList<IconText>();"

//的对象Entries具有排序功能"Collections.sort(Entries);"

public class IconText implements Comparable<IconText>{

    private String mText = " ";

    private Drawable mIcon;

    private boolean mSelectable = true;

    public IconifiedText(String text, Drawable bullet) {

        mIcon = bullet;

        mText = text;

    }

    public boolean isSelectable() {

        return mSelectable;

    }

    public void setSelectable(boolean selectable) {

        mSelectable = selectable;

    }

    //获取Text

    public String getText() {

        return mText;

    }

    //设置Text

    public void setText(String text) {

        mText = text;

    }

    //获取Icon

    public void setIcon(Drawable icon) {

        mIcon = icon;

    }

    //设置Icon

    public Drawable getIcon() {

        return mIcon;

    }

    //Comparable<?>接口中的方法

    @Override

    public int compareTo(IconText other) {

        if(this.mText != null)

            return this.mText.compareTo(other.getText()); 

        else 

            throw new IllegalArgumentException();

    }

}

第二步:创建一个TextView和ImageView组合成的View子类.

package hi.braincol.local.filebrowser.icontextlist;

import android.content.Context;

import android.graphics.drawable.Drawable;

import android.util.Log;

import android.view.Gravity;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;

//创建一个text和Icon组合的view子类

//继承与LinerLayout表示两个IconTextView中的TextView和ImageView之间是线性布局关系。

public class IconTextView extends LinearLayout {

    //类中的两个私有成员,Text和Icon

    //IconifiedTextView中的两个子View。由TextView和ImageView组合成一个新的View。

    private TextView mText;

    private ImageView mIcon;

    public IconifiedTextView(Context context, IconText aIconText) {

        super(context);

        /* First Icon and the Text to the right (horizontal),

         * not above and below (vertical) */

        //设置IconifiedTextView为水平线性布局

        this.setOrientation(HORIZONTAL);

        //垂直居中对齐

        this.setGravity(Gravity.CENTER_VERTICAL);

        //添加ImageView

        mIcon = new ImageView(context);

        mIcon.setImageDrawable(aIconText.getIcon());

        // left, top, right, bottom

        mIcon.setPadding(0, 2, 5, 2); // 5px to the right

        /* At first, add the Icon to ourself

         * (! we are extending LinearLayout) */

        addView(mIcon,  new LinearLayout.LayoutParams(

                LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

        //添加TextView, 由于先添加ImageView后添加TextView,所以 ICON 在前 Text 在后。

        mText = new TextView(context);

        mText.setText(aIconText.getText());

        /* Now the text (after the icon) */

        mText.setTextSize(17);

        mText.setPadding(5,2,2,0);

        //mText.setGravity(CENTER_VERTICAL);

        addView(mText, new LinearLayout.LayoutParams(

                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    }

    //设置TextView的Text内容

    public void setText(String words) {

        //Log.i("test","setText  "+words);

        mText.setText(words);

    }

    //设置ImageView的Icon图标

    public void setIcon(Drawable bullet) {

        //Log.i("test","setIcon  ");

        mIcon.setImageDrawable(bullet);

    }

}

第三步:建立一个BaseAdapter的子类用于Activity的布局(显示),也就是将很多IconTextView组合在一起。

package hi.braincol.local.filebrowser.icontextlist;

import java.util.ArrayList;

import java.util.List;

import android.content.Context;

import android.util.Log;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

//创建一个由IconText组成的ListAdapter。

public class IconTextListAdapter extends BaseAdapter {

    /** Remember our context so we can use it when constructing views. */

    private Context mContext;

    //创建一个数组适配器,适配器中每个元素为IconText

    private List<IconText> mItems = new ArrayList<IconText>();

    public IconTextListAdapter(Context context) {

        mContext = context;

    }

    //向适配器内增加元素

    public void addItem(IconText it) { mItems.add(it); }

    //设置适配器

    public void setListItems(List<IconText> lit) { mItems = lit; }

    /** @return The number of items in the List<IconText> mItems*/

    public int getCount() { return mItems.size(); }

    //获取positon指定位置的IconifiedText元素

    public Object getItem(int position) { return mItems.get(position); }

    public boolean areAllItemsSelectable() { return false; }

    //判断适配器内某个元素是否被选中

    public boolean isSelectable(int position) { 

        //Log.i("braincol","isSelectable");

抱歉!评论已关闭.