android 通用Toolbar

一、基于Activity

在的其他Activity只要继承于这个BaseActivity,实现抽象方法会实现返回操作,可以根据自己的需求把initBaseView里面的设置title和回退按钮的逻辑分离出来,比较更加通用一些。

public abstract class BaseActivity extends AppCompatActivity {

    
  /**
     * 输入toolbar的id,和文本内容    
     */
   public void initBaseView(int id,String title)
   {
       Toolbar  commonToolBar =  (Toolbar)findViewById(id);
       TextView commonTitle=(TextView)findViewById(R.id.setting_title);
       commonTitle.setText(title);
       setSupportActionBar(commonToolBar);
       setBackArrow();
   }

    /**
     * 设置左上角back按钮
     */
    public void setBackArrow() {

        final Drawable upArrow = getResources().getDrawable(R.drawable.icon_back_left);
        //给ToolBar设置左侧的图标
        getSupportActionBar().setHomeAsUpIndicator(upArrow);
        // 给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        //设置actionBar的标题是否显示,对应ActionBar.DISPLAY_SHOW_TITLE。
        getSupportActionBar().setDisplayShowTitleEnabled(false);
    }


    /**
     * 点击左上角的返回按钮,结束本Activity
     * home就是左上角的小箭头,在toolbar上
     *
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (item.getItemId() == android.R.id.home) {
            basefinish();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * 抽象方法,用于结束activity
     */
    public abstract void basefinish();

  
    @Override
    public void onBackPressed() {

        basefinish();
    }

}

二、基于Fragment

这个需要注意的是onViewCreated里面进行了相关初始化,在继承这个BaseFragment 的子类想要调用方法必须onViewCreated或者这个方法之后,这个方法在Fragment的生命周期中是onCreateView之后执行做相关的初始化操作

public class BaseFragment extends Fragment {
    /**
     * 通用的ToolBar标题
     */
    private TextView commonTitle;
    /**
     * 通用的ToolBar
     */
    private Toolbar commonToolBar;

    public  Activity mActivity;
    private AppCompatActivity mAppCompatActivity;

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mActivity = getActivity();
        mAppCompatActivity=(AppCompatActivity)mActivity;
   }

    public void initBaseView(View view,int id,String title)
    {
        commonToolBar = (Toolbar)view.findViewById(id);
        commonTitle=(TextView)view.findViewById(R.id.setting_title);
        mAppCompatActivity.setSupportActionBar(commonToolBar);
        commonTitle.setText(title);
        setBackArrow();
    }


    /**
     * 设置左上角back按钮
     */
    public void setBackArrow() {

        final Drawable upArrow = getResources().getDrawable(R.drawable.icon_back_left);
        //给ToolBar设置左侧的图标
        mAppCompatActivity.getSupportActionBar().setHomeAsUpIndicator(upArrow);
        // 给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP
        mAppCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        //设置actionBar的标题是否显示,对应ActionBar.DISPLAY_SHOW_TITLE。
        mAppCompatActivity.getSupportActionBar().setDisplayShowTitleEnabled(false);
    }

}

还需要注意的就是菜单按钮的创建和Activity不同:

Activity是需要返回值的 public boolean onOptionsItemSelected(MenuItem item) 方法,

Fragment是需要提前设置setHasOptionsMenu(true),同时是 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 一个void方法。

android 通用Toolbar

 

上一篇:傻傻分不清楚:裸纤、专线、SDH、MSTP、MSTP+、OTN、PTN、IP-RAN


下一篇:android – 如何在片段工具栏中设置菜单项?