找传奇、传世资源到传世资源站!

android自定义控件例子源码下载_

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

android自定义控件例子源码下载_ Android平台开发-第1张

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

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复