方法一: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();