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">