android 控件 toolbar BaseActivity集成toolbar

方法一: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里面。


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();



总结:添加控件,渲染布局,设置布局属性(setSupportActionBar,控制标题)

猜你喜欢

转载自blog.csdn.net/l331258747/article/details/52910247
今日推荐