步骤:
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);// }// }}