基本信息
源码名称:android自定义控件例子源码下载
源码大小:5.90M
文件格式:.zip
开发语言:Java
更新时间:2015-12-29
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍


package scratchcard.cbt.com.learnuserdefinedview;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * Created by caobotao on 15/12/9.
 */
public class TopBar extends RelativeLayout{
    /*
     * 声明控件
     */
    private Button leftBtn;//左按钮
    private TextView textView;//中间文本框
    private Button rightBtn;//右按钮

    /*
     * 声明三个控件的属性
     */
    //声明左按钮的属性
    private String leftText;//按钮文本
    private Drawable leftBackground;//按钮背景
    private int leftTextColor;//按钮文本颜色
    //声明中间文本框的属性
    private String tbTitle;//文本框文本
    private float titleTextSize;//文本框字体大小
    private int titleTextColor;//文本框字体颜色
    //声明右按钮的属性
    private String rightText;//按钮文本
    private Drawable rightBackground;//按钮背景
    private int rightTextColor;//按钮文本颜色

    /*
     * 声明三个控件的布局属性
     */
    private LayoutParams leftBtnLayoutParams;
    private LayoutParams textViewLayoutParams;
    private LayoutParams rightBtnLayoutParams;

    //声明左右按钮点击监听
    private TopBarBtnsOnClickListener listener;

    //创建一个监听左右按钮点击的接口
    public interface TopBarBtnsOnClickListener{
        public void leftBtnOnClick();//左按钮被点击的事件
        public void rightBtnOnClick();//右按钮被点击的事件
    }

    //向外提供一个设置监听的方法
    public void setOnTopBarBtnsClick(TopBarBtnsOnClickListener listener){
        this.listener = listener;
    }

    //重写构造方法
    public TopBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        /*
         * 用TypedArray可以获取用户在xml中声明的此控件的所有属性,以键值对存储,
         * K:资源文件(例 R.styleable.topBar_leftText)
         * V:属性值
         */
        TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.topBar);

        //为左按钮的属性赋值
        leftText = ta.getString(R.styleable.topBar_leftText);
        leftBackground = ta.getDrawable(R.styleable.topBar_leftBackground);
        leftTextColor = ta.getInt(R.styleable.topBar_leftTextColor,0);

        //为中间的文本框的属性赋值
        tbTitle = ta.getString(R.styleable.topBar_tbTitle);
        titleTextSize = ta.getDimension(R.styleable.topBar_titleTextSize,0);
        titleTextColor = ta.getInt(R.styleable.topBar_titleTextColor,0);

        //为右按钮的属性赋值
        rightText = ta.getString(R.styleable.topBar_rightText);
        rightBackground = ta.getDrawable(R.styleable.topBar_rightBackground);
        rightTextColor = ta.getInt(R.styleable.topBar_rightTextColor,0);

        //使用完TypedArray之后需要调用其recycle()方法,以便重用
        ta.recycle();

        //实例化三个控件
        leftBtn = new Button(context);
        textView = new TextView(context);
        rightBtn = new Button(context);

        //设置左按钮的属性
        leftBtn.setText(leftText);
        leftBtn.setBackground(leftBackground);
        leftBtn.setTextColor(leftTextColor);
        //设置文本框的属性
        textView.setText(tbTitle);
        textView.setTextSize(titleTextSize);
        textView.setTextColor(titleTextColor);
        textView.setGravity(Gravity.CENTER);
        //设置右按钮的属性
        rightBtn.setText(rightText);
        rightBtn.setBackground(rightBackground);
        rightBtn.setTextColor(rightTextColor);

        //设置此自定义控件的背景颜色
        setBackgroundColor(0xFFF59563);

        //实例化左按钮的布局属性
        leftBtnLayoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        //设置左按钮靠左显示
        leftBtnLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE);
        //将左按钮添加到本自定义控件中
        addView(leftBtn,leftBtnLayoutParams);

        //同上
        rightBtnLayoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        rightBtnLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE);
        addView(rightBtn,rightBtnLayoutParams);

        //同上
        textViewLayoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
        textViewLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE);
        addView(textView,textViewLayoutParams);

        //回调左按钮的监听事件
        leftBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.leftBtnOnClick();
            }
        });

        //回调右按钮的监听事件
        rightBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.rightBtnOnClick();
            }
        });

    }

    //当然,我们还可以添加其他控制此控件的方法,如设置左按钮是否可见等等,大家可根据自己的需求进行扩展
    public void setLeftBtnVisible(boolean isVisible){
        leftBtn.setVisibility(isVisible ? VISIBLE : INVISIBLE);
    }
}