Toolbar在项目中是使用非常频繁的组件,每一个页面都会有自己的标题,右上角自定义的按钮图标等,这里我将自己用到的方法分享出来,下面两个图
1、首先自定义出自己想要的Toolbar效果,一个app中toolbar的主题基本上是一致的,Toolbar的布局,其中右边的控件可以随意添别,包括ImageView,Button,TextView等等,可以随意定制出自己想要的效果,只需要在TobarManeger添加相应的操作,扩展非常方便
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#3a3268">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="充值"
android:textColor="#ffffff"
android:textSize="24sp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal">
<TextView
android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
android:textColor="#ffffff"
android:textSize="20sp"/>
<TextView
android:id="@+id/submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交"
android:textColor="#ffffff"
android:textSize="20sp"/>
</LinearLayout>
</android.support.v7.widget.Toolbar>
使用的时候include进自己的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/include_toobar"/>
</LinearLayout>
显示如下图
2、然后我会创建一个ToolBarManager类用来管理Toolbar,里面包含了控制显示和隐藏的内容方法,内容的点击事件,设置标题等。
/**
* [Description]
* <p>
* [How to use]
* <p>
* [Tips]
*
* @author Created by Jim.Huang on 2016/3/11.
* @since 1.0.0
*/
public class ToolBarManager implements Parcelable {
protected ToolBarManager(Parcel in) {
}
public static final Creator<ToolBarManager> CREATOR = new Creator<ToolBarManager>() {
@Override
public ToolBarManager createFromParcel(Parcel in) {
return new ToolBarManager(in);
}
@Override
public ToolBarManager[] newArray(int size) {
return new ToolBarManager[size];
}
};
private Context mContext;
private Toolbar mToolbar;
//标题
private TextView mTitleTv;
private TextView mSaveTv;
private TextView mSubmitTv;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
public ToolBarManager(Context context, Toolbar toolbar) {
mContext = context;
mToolbar = toolbar;
mTitleTv = (TextView) mToolbar.findViewById(R.id.title);
mTitleTv = (TextView) mToolbar.findViewById(R.id.save);
mTitleTv = (TextView) mToolbar.findViewById(R.id.submit);
}
public ToolBarManager init() {
//设置toolbar
mToolbar.setTitleTextColor(mContext.getResources().getColor(white));
// mToolbar.setBackgroundDrawable(mActionbarDrawable);
mToolbar.setBackgroundColor(mContext.getResources().getColor(R.color.color_main));
renew();
return this;
}
public void renew() {
//设置返回按钮
mToolbar.setNavigationIcon(R.drawable.pub_back_ic);
showSave(false);
showSubmit(false);
}
/**
* @param titleResId 设置标题方法
* @return
*/
public ToolBarManager setTitle(int titleResId) {
return setTitle(mContext.getResources().getString(titleResId));
}
public ToolBarManager setTitle(@Nullable String title) {
if (title == null) {
mTitleTv.setVisibility(View.GONE);
} else {
mTitleTv.setVisibility(View.VISIBLE);
mTitleTv.setText(title);
}
return this;
}
/**
* @param show 控制显示或隐藏
* @return
*/
public ToolBarManager showSave(boolean show) {
mSaveTv.setVisibility(show ? View.VISIBLE : View.GONE);
return this;
}
public ToolBarManager showSubmit(boolean show) {
mSubmitTv.setVisibility(show ? View.VISIBLE : View.GONE);
return this;
}
/**
* @param clickListener 点击回调
* @return
*/
public ToolBarManager clickSave(View.OnClickListener clickListener) {
mSaveTv.setOnClickListener(clickListener);
return this;
}
public ToolBarManager clickSubmit(View.OnClickListener clickListener) {
mSubmitTv.setOnClickListener(clickListener);
return this;
}
/**
* @param show 控制返回按钮是否可见
* @return
*/
public ToolBarManager showBack(boolean show) {
if (show) {
mToolbar.setNavigationIcon(R.drawable.pub_back_ic);
} else {
mToolbar.setNavigationIcon(null);
}
return this;
}
}
4、在具体页面的使用,在BaseActivity完成初始化工作,只要完成这些工作在后面的使用中就会非常简单和方便
/**
* [Description]
* <p/>
* [How to use]
* <p/>
* [Tips]
*
* @author Created by Jim.Huang on 2016/3/11.
* @since 1.0.0
*/
public class BaseActivity extends AppCompatActivity {
public Toolbar mToolbar;
public ToolBarManager mToolBarManager;
private static final int BACKSTACKENTRYCOUNT = 1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onStart() {
super.onStart();
//初始化ToolBarManager
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolBarManager = new ToolBarManager(this, mToolbar);
mToolBarManager.init();
//设置返回事件
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() == BACKSTACKENTRYCOUNT) {
finish();
} else {
super.onBackPressed();
}
}
}
在具体Activity继承这个BaseActivity使用时可以实现链式调用。
/**
* [Description]
* <p/>
* [How to use]
* <p/>
* [Tips]
*
* @author Created by Jim.Huang on 2016/3/11.
* @since 1.0.0
*/
public class ToobarTextActivity extends BaseActivity {
// Toolbar mToolbar;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_v1);
// mToolbar = (Toolbar) findViewById(R.id.toolbar);
}
@Override
protected void onStart() {
super.onStart();
mToolBarManager
.setTitle("余额充值")
.showSubmit(true)
.clickSubmit(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO: 2016/3/11 点击逻辑
}
});
}
}