自定义xml设置ToolBar,通过menu文件扩展选项,通过继承baseactivity使用
1.ToolBar布局
2.menu文件(title右侧图标,测试发现最多只能显示三个,如果超过三个第三个会变成更多的选项),另一种方式就是像上边那样在xml布局里写在Toolbar标签里
3.BaseActivity
/** * Created by Administrator on 2016/9/5 0005. */public class BaseActivity extends AppCompatActivity implements View.OnClickListener, Toolbar.OnMenuItemClickListener { /*Toolbar*/ private Toolbar toolBar; /**/ private CoordinatorLayout coordinatorLayout; /*是否第一次加载图标(主要针对首页一对多fragment)*/ private boolean title_menu_first = true; /*是否第一次加载返回*/ private boolean title_back_first = true; /*是否是返回(有可能是代表别的功能)*/ private boolean is_title_back = true; /*返回*/ private ImageView titleBack; /*标题名称*/ private TextView titleName; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); setRootView();// coordinatorLayout = getView(R.id.coordinatorLayout); initToolbar(); initWidght(); } protected void setRootView(){} protected void initWidght(){}; // protectedT getView(int resourcesId){ return (T) findViewById(resourcesId); }/*初始化toolbar*/ private void initToolbar(){ toolBar = getView(R.id.toolbar); toolBar.setTitle(""); toolBar.setTitleTextColor(Color.WHITE); titleName = getView(R.id.title_name);// setSupportActionBar(toolBar); } /** * 设置返回 * @param back :是否返回:是-->返回,不是则设置其他图标 * @param resourcesId :图标id,返回时随意设置,不使用 * */ protected void setTitleBack(final boolean back,int resourcesId){ is_title_back = back; if (title_back_first || titleBack == null){ titleBack= getView(R.id.title_back); titleBack.setOnClickListener(this); title_back_first = false; } titleBack.setVisibility(View.VISIBLE); if (!back){ titleBack.setImageResource(resourcesId); } } /** * 设置title * @param title :title * */ protected void setTitleName(String title){ titleName.setText(title); } /** * title右侧:图标类 * */ protected void setRightRes(){ //扩展menu toolBar.inflateMenu(R.menu.base_toolbar_menu); //添加监听 toolBar.setOnMenuItemClickListener(this); } /** * 显示title图标 * @param itemId :itemId :图标对应的选项id(1个到3个),最多显示3两个 * */ protected void showTitleRes(int... itemId){ if (title_menu_first){ setRightRes(); title_menu_first = false; } for (int item:itemId){ //显示 toolBar.getMenu().findItem(item).setVisible(true);//通过id查找,也可以用setIcon()设置图标// toolBar.getMenu().getItem(0).setVisible(true);//通过位置查找 } } /** * 隐藏title图标 * @param itemId :图标对应的选项id * */ protected void goneTitleRes(int... itemId){ if (titleBack != null) titleBack.setVisibility(View.GONE); for (int item:itemId){ //隐藏 toolBar.getMenu().findItem(item).setVisible(false); } } /** * title右侧文字 * @param str :文字内容 * */ protected void setTitleRightText(String str){ TextView textView = getView(R.id.title_rightTv); textView.setVisibility(View.VISIBLE); textView.setText(str); textView.setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.title_back && is_title_back){ onBackPressed(); } } //toolbar菜单监听 @Override public boolean onMenuItemClick(MenuItem item) { return false; }}
3.Activity使用
public class MainActivity extends BaseActivity{ @Override protected void setRootView() { super.setRootView(); setContentView(R.layout.activity_main); } @Override protected void initWidght() { super.initWidght(); setTitleName(getResources().getString(R.string.chat));//title// setTitleBack(false,R.mipmap.ic_search);//有图标,但不是返回 //setTitleBack(true,0);//返回// setTitleRightText("保存");//右侧文字 showTitleRes(R.id.title_add,R.id.title.setting);//扩展menu(图标) //goneTitleRes(R.id.title_add);隐藏图标,一般用不到 } @Override public void onClick(View v) { if (v.getId() == R.id.title_back){ workFragment.titleSearch(); } } @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()){ case R.id.title_add://添加 break; case R.id.title_apps://应用break; case R.id.title_setting://设置 break; } return super.onMenuItemClick(item); }}
Toolbar其他设置
1.去掉左边空白,在style文件里设置