版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22090073/article/details/62420938
本篇讲解如何简单的封装toolbar,用到了builder设计模式,使用起来也非常方便。
看看是怎么封装的吧!
首先创建一个toolbar布局文件:然后定义一个接口,用于对toolbar中组件的操作:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/match_wrap" android:orientation="vertical"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/ivLeftImg" style="@style/wrap_macth" android:layout_gravity="left" android:padding="@dimen/system_padding" /> <TextView android:id="@+id/tvTitle" style="@style/wrap_macth" android:layout_gravity="center" android:gravity="center" /> <ImageView android:id="@+id/ivRightImg" style="@style/wrap_macth" android:layout_gravity="right" android:padding="@dimen/system_padding" /> </FrameLayout> </LinearLayout>
然后定义一个接口,用于对toolbar中组件的操作:
public interface AssemblyBuilder { public Toolbar build(); public AssemblyBuilder showLeftImage(int resId); public AssemblyBuilder hideLeftImage(); public AssemblyBuilder showRightImage(int resId); public AssemblyBuilder hideRightImage(); public AssemblyBuilder showTitle(int resId); public AssemblyBuilder hideTitle(); public AssemblyBuilder onClickLeftImage(OnClickListener onClickListener); public AssemblyBuilder onClickRightImage(OnClickListener onClickListener); }
接下来就是我们自定义的toolbar了,创建一个类CustomToolbar, 继承toolbar,在这个类中初始化组件:
public ImageView getmLeftImg() { return (ImageView) findViewById(R.id.ivLeftImg); } public ImageView getmRightImg() { return (ImageView) findViewById(R.id.ivRightImg); } public TextView getmTitle() { return (TextView) findViewById(R.id.tvTitle); }然后就是我们的builder类了,在CustomToolbar类中定义一个内部类Builder,实现AssemblyBuilder接口:
public static class Builder implements AssemblyBuilder { private WEToolbar toolbarAssembly; private ImageView leftView; private TextView appTitle; private ImageView rightView; public Builder(WEToolbar weToolbar) { toolbarAssembly = weToolbar; leftView = toolbarAssembly.getmLeftImg(); appTitle = toolbarAssembly.getmTitle(); rightView = toolbarAssembly.getmRightImg(); } @Override public WEToolbar build() { return toolbarAssembly; } @Override public AssemblyBuilder showLeftImage(int leftImage) { if (leftView != null) { leftView.setImageResource(leftImage); leftView.setVisibility(VISIBLE); } return this; } @Override public AssemblyBuilder hideLeftImage() { if (leftView != null) { leftView.setVisibility(GONE); } return this; } @Override public AssemblyBuilder showRightImage(int rightImage) { if (rightView != null) { rightView.setImageResource(rightImage); rightView.setVisibility(VISIBLE); } return this; } @Override public AssemblyBuilder hideRightImage() { if (rightView != null) { rightView.setVisibility(GONE); } return this; } @Override public AssemblyBuilder showTitle(int title) { if (appTitle != null) { appTitle.setText(title); appTitle.setVisibility(VISIBLE); } return this; } @Override public AssemblyBuilder hideTitle() { if (appTitle != null) { appTitle.setVisibility(GONE); } return this; } @Override public AssemblyBuilder onClickLeftImage(OnClickListener onClickListener) { if (leftView != null) { leftView.setOnClickListener(onClickListener); } return this; } @Override public AssemblyBuilder onClickRightImage(OnClickListener onClickListener) { if (rightView != null) { rightView.setOnClickListener(onClickListener); } return this; } }这个内部类就是简单的builder设计模式,
然后就可以在activity中使用啦 !
在布局文件中:初始化我们的toolbar后,直接调用:
new WEToolbar.Builder(toolbar)
.showRightImage(R.mipmap.ic_launcher) .showTitle(R.string.toolbar) .onClickRightImage(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(getApplicationContext(), "right", Toast.LENGTH_SHORT).show(); } }) .hideLeftImage(); 当然,如果每个activity都用到toolbar的话,还可以将toolbar集成到BaseActivity里,
是不是很方便!
源码下载