Toolbar及自定义的Toolbar

1、使用Toolbar

xml中添加布局

<android.support.v7.widget.Toolbar
    android:id="@+id/ctoolbar"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:title="标题"
    app:navigationIcon="@mipmap/icon">

注意,若使用自定义的app属性,需要在根布局添加如下属性

xmlns:app="http://schemas.android.com/apk/res-auto"

2、自定义Toolbar

以下示例是自定义view,包括标题及右边增加按钮,并且依然使用toolbar左边的navigationIcon

在这里插入图片描述
第一步、创建attr

value文件中新增加attr

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CToolbar">
        <attr name="rightButtonIcon" format="reference"/>
    </declare-styleable>
</resources>

第二步、自定义CToolbar 继承ToolBar

Toolbar extends Toolbar {
    private EditText mtoolbar_searchview;
    private TextView mtoolbar_title;
    private ImageButton mtoolbar_rightButton;
    private static LayoutInflater mlayoutInflater;
    private static View mview;

    public CToolbar(Context context) {
        this(context,null);
    }

    public CToolbar(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }
    @SuppressLint("RestrictedApi")
    public CToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView();

//获取右边按钮并设置他的图片,import
        if(attrs!=null){
            final TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
                    R.styleable.CToolbar, defStyleAttr, 0);

         final Drawable rightIcon =  a.getDrawable(R.styleable.CToolbar_rightButtonIcon);

            if(rightIcon!=null){
                mtoolbar_rightButton.setImageDrawable(rightIcon);
                showRightButton();
            }
            a.recycle();
        }
    }

    private void initView(){
        if(mview ==null){
            mlayoutInflater = LayoutInflater.from(getContext());
            mview = mlayoutInflater.inflate(R.layout.toolbar,null);
            mtoolbar_title = mview.findViewById(R.id.toolbar_title);
            mtoolbar_rightButton = mview.findViewById(R.id.toolbar_rightButton);

            LayoutParams params = new LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT,Gravity.CENTER_HORIZONTAL);

            addView(mview,params);
        }
    }
//重写标题的2个方法,使用自定义布局中的textview
    @Override
    public void setTitle(int resId) {
        setTitle(getContext().getText(resId));
    }

    @Override
    public void setTitle(CharSequence title) {
        initView();     //import
        if(mtoolbar_title!=null){
            mtoolbar_title.setText(title);
            showTitle();
        }
    }

    public  void showTitle(){
        if(mtoolbar_title!=null){
            mtoolbar_title.setVisibility(VISIBLE);
        }
    }

    private  void hideTitle(){
        if(mtoolbar_title !=null){
            mtoolbar_title.setVisibility(GONE);
        }
    }
     public void showRightButton(){
        if (mtoolbar_rightButton!=null){
            mtoolbar_rightButton.setVisibility(VISIBLE);
        }
    }
    public  void hideRightButton(){
        if (mtoolbar_rightButton!=null){
            mtoolbar_rightButton.setVisibility(GONE);
        }
    }

//设置右边按钮的图片
    public void setRightButtonIcon(Drawable rightIcon ){
        if(rightIcon!=null){
            mtoolbar_rightButton.setImageDrawable(rightIcon);
            showRightButton();
        }
    }
//设置右边按钮的监听事件
        public void setRightButtonOnClickListener(OnClickListener cl){
            if(mtoolbar_rightButton!=null){
                mtoolbar_rightButton.setOnClickListener(cl);
            }
        }
    
    }

第 三步、布局中使用自定的toolbar

app:rightButtonIcon就是自定义的右边的按键的属性

<com.myapplication.widget.CToolbar
    android:id="@+id/ctoolbar"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:title="标题"
    app:navigationIcon="@mipmap/icon_back_32px"
    app:rightButtonIcon="@mipmap/ic_launcher">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值