android BaseActivity集成toolbar

方法一:baseActivity不自带布局,用include实现

1,创建一个toolbar布局

[java]  view plain  copy
  1. "1.0" encoding="utf-8"?>  
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/toolbar"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="wrap_content"  
  6.     android:background="@color/colorPrimary"  
  7.     android:minHeight="?attr/actionBarSize">  
  8.   



2,在需要的界面布局中include写入



3,创建baseActivity,一般base的写法,oncreate中

[java]  view plain  copy
  1. setContentViewsetContentView(getLayoutId());    添加布局  
  2. initToolBar();                                  初始化toolbar,  
  3. getIntentData();                                intent传递数据  
  4. initView();                                     初始化控件  
  5. initData();                                     初始化数据  



4,设置initToolBar

[java]  view plain  copy
  1. mToolbar = (Toolbar) findViewById(R.id.toolbar);  
  2.     if (mToolbar != null) {  
  3.         //将Toolbar显示到界面  
  4.         setSupportActionBar(mToolbar);  
  5.     }  



5,添加toolbar的控制方法

[java]  view plain  copy
  1. 5,添加toolbar的控制方法  
  2.     1,toolbar是否存在  
  3.     public Toolbar getToolbar() {  
  4.         return (Toolbar) findViewById(R.id.toolbar);  
  5.     }  
  6.       
  7.     2,设置标题  
  8.     public void setToolBarTitle(CharSequence title) {  
  9.         getToolbar().setTitle(title);  
  10.         setSupportActionBar(getToolbar());  
  11.     }  
  12.       
  13.     3,是否显示后退键  
  14.     protected boolean isShowBacking(){  
  15.         return true;  
  16.     }  
  17.       
  18.     4,后退方法  
  19.     showBack(){  
  20.         getToolbar().setNavigationIcon(R.mipmap.icon_back);  
  21.         getToolbar().setNavigationOnClickListener(new View.OnClickListener() {  
  22.             @Override  
  23.             public void onClick(View v) {  
  24.                 onBackPressed();  
  25.             }  
  26.         });  
  27.     }  
  28.       
  29.     5,在onstart里面判断  
  30.     onstart(){  
  31.         if(null != getToolbar() && isShowBacking()){  
  32.              showBack();  
  33.         }  
  34.     }  


方法二,baseactivity自带布局,用inflate实现

每个activity下都有一个LinearLayout(DecorWindow)装载着一个titleView和一个ContentView,其实这个titleView就是我们的actionBar,
所以要使用ToolBar必须设置主题为NoActionBar,我们在activity里面调用setContentView这个方法其实就是把我们的布局加到ContentView里面。


1,创建一个toolbar布局

[java]  view plain  copy
  1. "http://schemas.android.com/apk/res/android"  
  2. android:layout_width="match_parent" android:layout_height="wrap_content">  
  3.     android:id="@+id/toolbar"  
  4.     android:background="@color/colorPrimary"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="?attr/actionBarSize">  
  7.   
  8.   


2,定义变量

[java]  view plain  copy
  1. private Toolbar mtoolBar;   
  2. private LinearLayout mDectorView = null;//根布局   
  3. private FrameLayout mContentView = null;//activity内容布局  


3,初始化布局,mDectorView根布局的初始化,把toolbar添加进来(toolbar的初始化看4),在添加mContentView

[java]  view plain  copy
  1. private void initDectorView() {  
  2.     mDectorView = new LinearLayout(this);  
  3.     mDectorView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,  
  4.         ViewGroup.LayoutParams.MATCH_PARENT));  
  5.     mDectorView.setOrientation(LinearLayout.VERTICAL);  
  6.     addToolBar();  
  7.     mContentView = new FrameLayout(this);  
  8.     mContentView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,  
  9.         ViewGroup.LayoutParams.MATCH_PARENT));  
  10.     mDectorView.addView(mContentView);  
  11. }  


4初始化toolbar,公共属性初始化

[java]  view plain  copy
  1. protected void addToolBar() {  
  2.     View view = getLayoutInflater().inflate(R.layout.toolbar_layout, mDectorView);  
  3.     mtoolBar = (Toolbar) view.findViewById(R.id.toolbar);  
  4.     mtoolBar.setTitleTextColor(Color.parseColor("#ff00ff"));  
  5.       
  6. }  



5,重写setContentView,把子布局添加进mContentView,super.setContentView(跟布局)

[java]  view plain  copy
  1. public void setContentView(@LayoutRes int layoutResID) {  
  2.     getLayoutInflater().inflate(layoutResID, mContentView);  
  3.     super.setContentView(mDectorView);  
  4. }  


6,布局都添加了之后就能可以写一些公共类了。

[java]  view plain  copy
  1. getToolbar();  
  2. initToolbar(mtoolBar);  

7,onCreate中的结构

[java]  view plain  copy
  1. if (mDectorView == null) {  
  2.     initDectorView();//初始化跟布局(添加toolbar,添加mContentview给子布局留空间)  
  3. }  
  4.   
  5.   
  6. //如果已经创建就先把内容清空,再添加  
  7. if (mContentView != null) {  
  8.     mContentView.removeAllViews();//mContentview清空里面的view  
  9. }  
  10.   
  11.   
  12. setContentView(getLayoutId());//把子布局添加进mContentView  
  13.   
  14.   
  15. setSupportActionBar(mtoolBar);//布局渲染完了之后,才能setSupportActionBar  
  16. getIntentData();//intent数据  
  17. initView();//初始化控件  
  18. initData();//初始化数据  


initToolbar(mtoolBar);//等初始化完根布局,子布局添加进mContentView后,就能对toolbar进行操作,不然再操作控件的时候会出错。
设置标题的时候用getSupportActionBar().setTitle();

你可能感兴趣的:(android BaseActivity集成toolbar)