package com.gh.base; import android.os.Bundle; import android.support.annotation.DrawableRes; import android.support.annotation.StringRes; import android.support.v4.app.Fragment; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; import com.gh.common.util.DisplayUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.normal.ToolbarController; import com.lightgame.BaseAppCompatActivity; import com.lightgame.OnTitleClickListener; import java.util.List; /** * Created by csheng on 15-10-12. */ public abstract class BaseToolBarActivity extends BaseAppCompatActivity implements ToolbarController, Toolbar.OnMenuItemClickListener { private Toolbar mToolbar; private TextView mTitleTv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initToolbar(); } private void initToolbar() { mToolbar = findViewById(R.id.normal_toolbar); mTitleTv = findViewById(R.id.normal_title); if (mToolbar != null) { // setSupportActionBar(mToolbar); // 替换actionBar后 toolBar无法控制 mToolbar.setNavigationIcon(provideNavigationIcon()); mToolbar.setNavigationOnClickListener(view -> onBackPressed()); mTitleTv.setOnClickListener(view -> { final List fragmentList = getSupportFragmentManager().getFragments(); for (Fragment fragment : fragmentList) { if (fragment instanceof OnTitleClickListener) { ((OnTitleClickListener) fragment).onTitleClick(); } } }); } } @DrawableRes public int provideNavigationIcon() { return R.drawable.ic_bar_back; // default navigation icon } @Override public void setNavigationTitle(String title) { if (mTitleTv != null) mTitleTv.setText(title); } @Override public void setNavigationTitle(@StringRes int res) { setNavigationTitle(getString(res)); } @Override public void setToolbarMenu(int res) { if (mToolbar == null) return; mToolbar.inflateMenu(res); mToolbar.setOnMenuItemClickListener(this); Menu menu = mToolbar.getMenu(); for (int i = 0; i < menu.size(); i++) { MenuItem menuItem = menu.getItem(i); // menu设置actionLayout后,无法捕捉点击事件,以icon为tag,如果icon is null 手动设置menuItem点击事件 if (menuItem != null && menuItem.getIcon() == null) { if (menuItem.getActionView() != null) { menuItem.getActionView().setOnClickListener((v) -> this.onMenuItemClick(menuItem)); } } } // 限制标题实际宽度 防止标题挡住toolbar menu按钮 if (menu.size() > 2 && mTitleTv != null) { ViewGroup.LayoutParams layoutParams = mTitleTv.getLayoutParams(); if (layoutParams instanceof RelativeLayout.LayoutParams) { RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) layoutParams; params.setMargins(DisplayUtils.dip2px(90), 0, DisplayUtils.dip2px(90), 0); mTitleTv.setLayoutParams(params); } } } @Override public MenuItem getMenuItem(int res) { if (mToolbar == null) return null; //后续页面做好判断 return mToolbar.getMenu().findItem(res); } public Menu getMenu() { return mToolbar.getMenu(); } @Override public boolean onMenuItemClick(MenuItem item) { return false; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: return onNavigationIconClicked(); } return super.onOptionsItemSelected(item); } protected abstract boolean onNavigationIconClicked(); }