美文网首页
组合控件 TopBar

组合控件 TopBar

作者: 巡皇wx | 来源:发表于2017-09-19 20:08 被阅读0次

自定义组合控件 定义类继承RelativeLayout

public class TopBar extends RelativeLayout {

//topBar上的元素

private Button leftButton, rightButton;

private TextView mTitle;

//布局属性,控制元素在viewgroup的位置

private LayoutParams lParams, rParams, mParams;

//中间文字的属性值

private String title;

private float titleSize;

private int titleColor;

private Drawable titleBackgroundColor;

//左按钮的属性值

private String leftButtonText;

private float leftButtonSize;

private int leftButtonColor;

private Drawable leftButtonBackgroundColor;

//右按钮的属性值

private String rightButtonText;

private float rightButtonSize;

private int rightButtonColor;

private Drawable rightButtonBackgroundColor;

//注册接口成员属性

private TopBarClickListener topBarClickListener;

public TopBar(Context context) {

super(context);

}

public TopBar(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

initAttrs(context, attrs);

}

public TopBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

initAttrs(context, attrs);

}

//定义控件属性的方法

private void initAttrs(Context context, AttributeSet attrs) {

setBackgroundColor(0xFFF59563);

TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TopBar);

// 从TypedArray中取出对应的值来为要设置的属性赋值

title = typedArray.getString(R.styleable.TopBar_title);

titleSize = typedArray.getDimension(R.styleable.TopBar_titleSize,10);

titleColor = typedArray.getColor(R.styleable.TopBar_titleColor ,0);

titleBackgroundColor = typedArray.getDrawable(R.styleable.TopBar_titleBackGroundColor);

leftButtonText = typedArray.getString(R.styleable.TopBar_leftText);

leftButtonSize = typedArray.getDimension(R.styleable.TopBar_leftTextSize,10);

leftButtonColor = typedArray.getColor(R.styleable.TopBar_leftTextColor,0);

leftButtonBackgroundColor = typedArray.getDrawable(R.styleable.TopBar_leftTextBackGroundColor);

rightButtonText = typedArray.getString(R.styleable.TopBar_rightText);

rightButtonSize = typedArray.getDimension(R.styleable.TopBar_rightTextSize,10);

rightButtonColor = typedArray.getColor(R.styleable.TopBar_rightTextColor,0);

rightButtonBackgroundColor = typedArray.getDrawable(R.styleable.TopBar_rightTextBackGroundColor);

// recyle方法来避免重新创建的时候的错误

typedArray.recycle();

//实例元素组件

leftButton = new Button(context);

rightButton = new Button(context);

mTitle = new TextView(context);

//给元素组件赋值

mTitle.setText(title);

mTitle.setTextSize(titleSize);

mTitle.setTextColor(titleColor);

mTitle.setBackground(titleBackgroundColor);

leftButton.setText(leftButtonText);

leftButton.setTextSize(leftButtonSize);

leftButton.setTextColor(leftButtonColor);

leftButton.setBackground(leftButtonBackgroundColor);

rightButton.setText(rightButtonText);

rightButton.setTextSize(rightButtonSize);

rightButton.setTextColor(rightButtonColor);

rightButton.setBackground(rightButtonBackgroundColor);

//为元素组件设置布局

lParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);

lParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, TRUE);

addView(leftButton,lParams);

mParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);

mParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE);

addView(mTitle,mParams);

rParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);

rParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE);

addView(rightButton,rParams);

//按钮点击监听,调用接口

leftButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

topBarClickListener.leftClick();

}

});

rightButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

topBarClickListener.rightClick();

}

});

}

public interface TopBarClickListener {

//左按钮点击

void leftClick();

//右按钮点击

void rightClick();

}

//给接口定义set方法   可定义监听事件

public void setTopBarClickListener(TopBarClickListener topBarClickListener) {

this.topBarClickListener = topBarClickListener;

}

}

values文件夹下新建arrts

<declare-styleable name="TopBar">

<attr name="title" format="string">

<attr name="titleSize" format="dimension">

<attr name="titleColor" format="color">

<attr name="titleBackGroundColor" format="reference|color">

<attr name="leftText" format="string">

<attr name="leftTextSize" format="dimension">

<attr name="leftTextColor" format="color">

<attr name="leftTextBackGroundColor" format="reference|color">

<attr name="rightText" format="string">

<attr name="rightTextSize" format="dimension">

<attr name="rightTextColor" format="color">

<attr name="rightTextBackGroundColor" format="reference|color">

在布局中可直接使用定义好的控件

相关文章

  • 组合控件 TopBar

    自定义组合控件 定义类继承RelativeLayout public class TopBar extends R...

  • 【Android】自定义控件

    Android自定义控件可以有三种实现方式 组合原生控件自己绘制控件继承原生控件 1 组合原生控件 1.1 组合原...

  • 【Android开发进阶系列】自定义视图专题

    1 自定义视图方法汇总 1.1 (一)组合控件 (一)组合控件 组合控件,顾名思义就是将一些小的控件组合起来形成一...

  • 自定义View学习总结(三)

    这篇介绍一种自定义控件,组合控件经常使用的界面,并且界面是由多个子控件或子布局组成,这时候需要组合控件组合控件的作...

  • Android入门06 -- 自定义控件

    自定义组合控件 将几个子控件组合在一起,形成一个可复用的新的组合控件,自定义组合控件一般继承自RelativeLa...

  • 自定义控件

    自定义控件分三种 组合控件(CompositeControls):在原有控件的基础上根据需要进行组合。 扩展控件(...

  • 11-自定义组合控件以及使用

    一、自定义组合控件介绍 开发中,为了使用的方便,经常把一些控件组合成一个控件,那样就成为了我们的自定义组合控件,严...

  • android2019-01-03

    1.View的绘制流程自定义控件:1、组合控件。这种自定义控件不需要我们自己绘制,而是使用原生控件组合成的新控件。...

  • 自定义TopBar

    自定义TopBar

  • 11.7

    今天学习了列表框控件、组合框控件、单选按钮控件、复选按钮控件、分组框控件。。。。。

网友评论

      本文标题:组合控件 TopBar

      本文链接:https://www.haomeiwen.com/subject/niegsxtx.html