方法一:baseActivity不自带布局,用include实现
1,创建一个toolbar布局
- <?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="wrap_content"
- android:background="@color/colorPrimary"
- android:minHeight="?attr/actionBarSize">
- </android.support.v7.widget.Toolbar>
2,在需要的界面布局中include写入
3,创建baseActivity,一般base的写法,oncreate中
- setContentViewsetContentView(getLayoutId()); 添加布局
- initToolBar(); 初始化toolbar,
- getIntentData(); intent传递数据
- initView(); 初始化控件
- initData(); 初始化数据
4,设置initToolBar
- mToolbar = (Toolbar) findViewById(R.id.toolbar);
- if (mToolbar != null) {
- //将Toolbar显示到界面
- setSupportActionBar(mToolbar);
- }
5,添加toolbar的控制方法
- 5,添加toolbar的控制方法
- 1,toolbar是否存在
- public Toolbar getToolbar() {
- return (Toolbar) findViewById(R.id.toolbar);
- }
- 2,设置标题
- public void setToolBarTitle(CharSequence title) {
- getToolbar().setTitle(title);
- setSupportActionBar(getToolbar());
- }
- 3,是否显示后退键
- protected boolean isShowBacking(){
- return true;
- }
- 4,后退方法
- showBack(){
- getToolbar().setNavigationIcon(R.mipmap.icon_back);
- getToolbar().setNavigationOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- onBackPressed();
- }
- });
- }
- 5,在onstart里面判断
- onstart(){
- if(null != getToolbar() && isShowBacking()){
- showBack();
- }
- }
方法二,baseactivity自带布局,用inflate实现
每个activity下都有一个LinearLayout(DecorWindow)装载着一个titleView和一个ContentView,其实这个titleView就是我们的actionBar,
所以要使用ToolBar必须设置主题为NoActionBar,我们在activity里面调用setContentView这个方法其实就是把我们的布局加到ContentView里面。
initToolbar(mtoolBar);//等初始化完根布局,子布局添加进mContentView后,就能对toolbar进行操作,不然再操作控件的时候会出错。
设置标题的时候用getSupportActionBar().setTitle();
所以要使用ToolBar必须设置主题为NoActionBar,我们在activity里面调用setContentView这个方法其实就是把我们的布局加到ContentView里面。
1,创建一个toolbar布局
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent" android:layout_height="wrap_content">
- <android.support.v7.widget.Toolbar
- android:id="@+id/toolbar"
- android:background="@color/colorPrimary"
- android:layout_width="match_parent"
- android:layout_height="?attr/actionBarSize">
- </android.support.v7.widget.Toolbar>
- </FrameLayout>
2,定义变量
- private Toolbar mtoolBar;
- private LinearLayout mDectorView = null;//根布局
- private FrameLayout mContentView = null;//activity内容布局
3,初始化布局,mDectorView根布局的初始化,把toolbar添加进来(toolbar的初始化看4),在添加mContentView
- private void initDectorView() {
- mDectorView = new LinearLayout(this);
- mDectorView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT));
- mDectorView.setOrientation(LinearLayout.VERTICAL);
- addToolBar();
- mContentView = new FrameLayout(this);
- mContentView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT));
- mDectorView.addView(mContentView);
- }
4初始化toolbar,公共属性初始化
- protected void addToolBar() {
- View view = getLayoutInflater().inflate(R.layout.toolbar_layout, mDectorView);
- mtoolBar = (Toolbar) view.findViewById(R.id.toolbar);
- mtoolBar.setTitleTextColor(Color.parseColor("#ff00ff"));
- }
5,重写setContentView,把子布局添加进mContentView,super.setContentView(跟布局)
- public void setContentView(@LayoutRes int layoutResID) {
- getLayoutInflater().inflate(layoutResID, mContentView);
- super.setContentView(mDectorView);
- }
6,布局都添加了之后就能可以写一些公共类了。
- getToolbar();
- initToolbar(mtoolBar);
7,onCreate中的结构
- if (mDectorView == null) {
- initDectorView();//初始化跟布局(添加toolbar,添加mContentview给子布局留空间)
- }
- //如果已经创建就先把内容清空,再添加
- if (mContentView != null) {
- mContentView.removeAllViews();//mContentview清空里面的view
- }
- setContentView(getLayoutId());//把子布局添加进mContentView
- setSupportActionBar(mtoolBar);//布局渲染完了之后,才能setSupportActionBar
- getIntentData();//intent数据
- initView();//初始化控件
- initData();//初始化数据
initToolbar(mtoolBar);//等初始化完根布局,子布局添加进mContentView后,就能对toolbar进行操作,不然再操作控件的时候会出错。
设置标题的时候用getSupportActionBar().setTitle();