自定义Toolbar

来源:互联网 发布:linux服务定时启动 编辑:程序博客网 时间:2024/04/26 12:02

步骤:

1、继承toolbar,实现构造方法

2、拷贝包含包名的全路径到activity_main.xml中

3、编写要挂载到toolbar的xml文件

4、在attr文件中自定义属性

5、在自定义toolbar的java文件中init()方法挂载xml,构造方法中读取属性值并初始化要挂载的控件。然后设置监听。


xml文件代码:

<RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content">    <EditText        android:id="@+id/toolbar_searchview"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:layout_centerVertical="true"        android:gravity="center"        android:drawableLeft="@mipmap/icon_search"        style="@style/search_view"        android:hint="请输入搜索内容"        android:visibility="gone"        />    <TextView        android:id="@+id/toolbar_title"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:layout_gravity="center"        android:gravity="center"        android:textColor="@color/white"        android:textSize="20sp"        android:visibility="gone"        />    <ImageButton        android:id="@+id/toolbar_rightButton"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_centerVertical="true"        android:visibility="gone"        style="@android:style/Widget.Material.Toolbar.Button.Navigation"        /></RelativeLayout>

attr文件代码:

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

java文件代码:

public class CnToolbar extends Toolbar {    private LayoutInflater mInflater;    private View mView;    private TextView mTextTitle;    private EditText mSearchView;    private ImageButton mRightImageButton;    public CnToolbar(Context context) {        this(context,null);    }    public CnToolbar(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public CnToolbar(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initView();        setContentInsetsRelative(10,10);        if(attrs !=null) {//读取属性值            final TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,                    R.styleable.CnToolbar, defStyleAttr, 0);            final Drawable rightIcon = a.getDrawable(R.styleable.CnToolbar_rightButtonIcon);            if (rightIcon != null) {                setRightButtonIcon(rightIcon);            }            boolean isShowSearchView = a.getBoolean(R.styleable.CnToolbar_isShowSearchView,false);            if(isShowSearchView){                showSearchView();                hideTitleView();            }            a.recycle();        }    }    private void initView() {//挂载布局        if(mView == null) {            mInflater = LayoutInflater.from(getContext());            mView = mInflater.inflate(R.layout.toolbar, null);            mTextTitle = (TextView) mView.findViewById(R.id.toolbar_title);            mSearchView = (EditText) mView.findViewById(R.id.toolbar_searchview);            mRightImageButton = (ImageButton) mView.findViewById(R.id.toolbar_rightButton);            LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL);            addView(mView, lp);        }    }    public void  setRightButtonIcon(Drawable icon){//设置toolbar右边按钮图片        if(mRightImageButton !=null){            mRightImageButton.setImageDrawable(icon);            mRightImageButton.setVisibility(VISIBLE);        }    }    public  void setRightButtonOnClickListener(OnClickListener li){
//设置右边按钮监听
mRightImageButton.setOnClickListener(li); } @Override public void setTitle(int resId) { setTitle(getContext().getText(resId)); } @Override public void setTitle(CharSequence title) { initView(); if(mTextTitle !=null) { mTextTitle.setText(title); showTitleView(); } } public void showSearchView(){ if(mSearchView !=null) mSearchView.setVisibility(VISIBLE); } public void hideSearchView(){ if(mSearchView !=null) mSearchView.setVisibility(GONE); } public void showTitleView(){ if(mTextTitle !=null) mTextTitle.setVisibility(VISIBLE); } public void hideTitleView() { if (mTextTitle != null) mTextTitle.setVisibility(GONE); }//// private void ensureRightButtonView() {// if (mRightImageButton == null) {// mRightImageButton = new ImageButton(getContext(), null,// android.support.v7.appcompat.R.attr.toolbarNavigationButtonStyle);// final LayoutParams lp = generateDefaultLayoutParams();// lp.gravity = GravityCompat.START | (Gravity.VERTICAL_GRAVITY_MASK);// mRightImageButton.setLayoutParams(lp);// }// }}



0 0
原创粉丝点击