1.在我们需要顶部导航栏的布局文件当中添加Toolbar,并且配置一些常用的属性(使用自定义属性的时候需要注意把命名空间“app”添加到根节点)。
这里只列出一些常用的属性,比如最小高度,返回按钮的图标,背景等等。这里需要注意的是,属性值中的“
?
”表示对
Android
系统的主题样式进行重用。意思是如果我们改变了主题样式中的
colorPrimary
属性的话,
Toolbar
的背景颜色也会随之改变,因此提醒我们去主题样式中进行一些配置。
xmlns:app="http://schemas.android.com/apk/res-auto";
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?actionBarSize"
app:navigationIcon="@mipmap/arrow_left"
app:title="标题"/>
2.在styles.xml文件中进行一些常用的配置。由于我们使用的是
AppCompatActivity,因此必须使用AppCompat的相关主题,笔者这里使用亮色调的没有ActionBar的主题,注意需要在清单文件当中去使用自己定义的主题。为了完全去掉ActionBar,需要把windowActionBar、windowNoTitle以及加上android声明的也写上,确保把系统自带的以及第三方兼容包的ActionBar都彻底去掉。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/red</item>
<item name="colorPrimaryDark">@color/green</item>
<item name="colorAccent">@color/blue</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
colorPrimaryDark是我们手机最顶端的状态栏的背景颜色(改变它需要Android5.0以及以上的手机支持才行)。
colorPrimary是指导航栏的颜色。
colorAccent是指我们常用控件比如Button等的颜色。
textColorPrimary是指我们导航栏中标题的颜色。
windowBackground是指我们窗体的默认颜色。
navigationBarColor是指Android手机中虚拟按键的背景颜色。
package com.example.jingbiaozhen.customdraggridview.view;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.jingbiaozhen.customdraggridview.R;
/*
* Created by jingbiaozhen on 2017/12/16.
* 自定义ToolBar,分析各种属性
**/
public class CustomToolbar extends Toolbar
{
private String title;
private View mChildView;
private TextView mTitleTv;
private EditText mSearchView;
private boolean isShowSearchView;
private ImageView mLeftIv;
private ImageView mRightIv;
private Drawable rightDrawable;
private Drawable leftDrawable;
private OnLeftButtonClickListener mLeftButtonClickListener;
private OnRightButtonClickListener mRightButtonClickListener;
public CustomToolbar(Context context)
{
this(context, null);
}
public CustomToolbar(Context context, @Nullable AttributeSet attrs)
{
this(context, attrs, 0);
}
public CustomToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
initFromAttributes(context, attrs, defStyleAttr);
initView();
initListener();
}
private void initListener()
{
mLeftIv.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
mLeftButtonClickListener.click();
}
});
mRightIv.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
mRightButtonClickListener.click();
}
});
}
public interface OnLeftButtonClickListener
{
void click();
}
public interface OnRightButtonClickListener
{
void click();
}
public void setOnLeftButtonClickListener(OnLeftButtonClickListener listener)
{
mLeftButtonClickListener = listener;
}
public void setOnRightButtonClickListener(OnRightButtonClickListener listener)
{
mRightButtonClickListener = listener;
}
private void initView()
{
if (mChildView == null)
{
mChildView = View.inflate(getContext(), R.layout.view_custom_toolbar, null);
mLeftIv = (ImageView) mChildView.findViewById(R.id.toolbar_leftButton);
mRightIv = (ImageView) mChildView.findViewById(R.id.toolbar_rightButton);
mTitleTv = (TextView) mChildView.findViewById(R.id.toolbar_title);
mSearchView = (EditText) mChildView.findViewById(R.id.toolbar_searchview);
addView(mChildView);
showTitle(!isShowSearchView);
showSearchView(isShowSearchView);
if (leftDrawable != null)
{
mLeftIv.setImageDrawable(leftDrawable);
}
if (rightDrawable != null)
{
mRightIv.setImageDrawable(rightDrawable);
}
}
}
public void showTitle(boolean isShowTitle)
{
if (isShowTitle)
{
mTitleTv.setVisibility(VISIBLE);
if (!TextUtils.isEmpty(title))
{
mTitleTv.setText(title);
}
}
else
{
mTitleTv.setVisibility(GONE);
}
}
public void showSearchView(boolean isShowSearchView)
{
if (isShowSearchView)
{
mSearchView.setVisibility(VISIBLE);
}
else
{
mSearchView.setVisibility(GONE);
}
}
public void setLeftButtonIconDrawable(Drawable d)
{
mLeftIv.setImageDrawable(d);
}
public void setRightButtonIconDrawable(Drawable d)
{
mRightIv.setImageDrawable(d);
}
private void initFromAttributes(Context context, AttributeSet attrs, int defStyleAttr)
{
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomToolbar, defStyleAttr, 0);
isShowSearchView = a.getBoolean(R.styleable.CustomToolbar_showSearchView, false);
rightDrawable = a.getDrawable(R.styleable.CustomToolbar_rightButtonIcon);
leftDrawable = a.getDrawable(R.styleable.CustomToolbar_leftButtonIcon);
title = a.getString(R.styleable.CustomToolbar_MyTitle);
a.recycle();
}
}