先说我折腾的环境:
我用的是android Studio 2.0
如果你的app 是在activity之间来回跳转的话,使用Toolbar作为一个导航栏,那么是很简单就能实现的
Manifest.xml配置为
theme是在Style里定义的
准备好之后就可以在MainActivity的布局文件中添加Toolbar进去了
android:textColor="@android:color/white"
android:textSize="20sp" />
Toolbar里面包含了一个TextView 是实现 Title居中用的,后面说
在activity里通过id查找到Toolbar,就可以set.xxx了
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//不显示标题,该设置放在setSupportActionBar(toolbar);后面时无效
toolbar.setTitle("");
//设置导航图标
toolbar.setNavigationIcon(R.drawable.menu_icon);
//设置Logo
toolbar.setLogo(R.drawable.android_icon);
//用Toolbar里包含的TextView显示标题达到居中效果
TextView toolbarTitle = (TextView) findViewById(R.id.toolbarTv);
toolbarTitle.setText("首页");
setSupportActionBar(toolbar);
初步效果是这样的:
activity使用的是没有ActionBar的theme,此时ActionBar只是隐藏了,先定义一个menuzi'yuan
然后在代码里解析menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.action_settings:
Toast.makeText(this, "selected setting", Toast.LENGTH_SHORT).show();
break;
case R.id.search:
Toast.makeText(this, "selected search", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
效果是这样的
由于activity是重量级View,在app内部实现界面跳转建议使用Fragment,比较省资源,我想实现的是一个activity里面,顶部是一个toolbar导航,下面是Fragment,可以来回跳转,有几个问题,如果使用一个
即使我要的是替换效果。出来的却是上面的叠加效果
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_main, container, false);
root.findViewById(R.id.btnGo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().beginTransaction()
.addToBackStack(null)
.replace(R.id.container, new LoginFragment())
.commit();
}
});
return root;
}
我猜测可能是自动生成的那个Fragment和自定义使用的不是一个ViewGroup,如果你想完全自定义来实现想要的结果
新建一个工程,只用一个空的activity,添加一个toolbar进去,再添加一个Fragment进去,在代码中操作toolbar,运行之后会发现,Fragment是不会显示的,被覆盖在toolbar底下了,此时你心里一定有一万只草泥马奔腾而过,怎么会这样的,折腾了好久之后偶然间我把默认布局改成LinearLauoyt并设置走向为竖直时,添加进去的toolbar和Fragment终于能正常显示了,互不干涉,再操作Fragment跳转就正常了,不会出现叠加现象
总结一下上面说到的问题
1.不需要toolbar上使用menu时,最简单直接的方式是给app一个NoActionBar的theme就行了
2.同时使用toolbar和Fragment时,出现覆盖时,要修改默认布局
3.想高效率使用toolbar,可以将toolbar单独定义成一个xml布局,在activity布局里include进去即可,不必创建多个toolbar
4.关于Fragment的使用,可以参考官方详细说明 Fragment官方说明
以上是我自己的摸索过程中遇到的一些问题,实现方法也比较简陋,欢迎各位朋友指正