本博客内容:
- toolbar 与actionBar的关系
- 使用toolbar
- toolbar 的使用方法,如,添加menu,设置menu点击事件,返回按钮的设置
ToolBar作为新特性替代ActionBar,toolbar 功能更加丰富
- 但是容易混淆这两个
如何使用 方法1. 变化 ActionBar 为 toolbar ,方法2.使用toolbar
- 看主题 styles.xml(如果是这样带有 ActionBar的类似Theme)
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
使用方法:
关键点:
- styles.xml 应用 的主题下添加下列话(新建一个主题NoActionBar的主题)
<style name="AtyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
</style>
- AndroidManifest.xml 给对应的 activity 设置主题
<activity android:name=".MainActivity"
android:theme="@style/AtyTheme">
。。。
</activity>
- 在 activity.xml 中 使用 toolbar
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:background="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
- MainActivity.java
Toolbar toolbar = findViewById(R.id.toolbar); // 这样就可以设置其他的参数了
setSupportActionBar(toolbar ); // 调用 Activity 的 setSupportActionBar() 方法,然后传递 Activity 的工具栏。该方法会将工具栏设置为 Activity 的应用栏。
// 至此可以调用原生ActionBar的方法
toolbar .hide() ; //隐藏应用栏
第二种使用方法(不推荐)
Toolbar作为导航条
不同之处,不添加新的主题
- 在应用自带主题下添加
styles.xml
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
- activity.xml(同上)
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:background="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
- MainActivity.java
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle("标题");
setSupportActionBar(toolbar);
getSupportActionBar();
扩展其他的一些使用方法:
- 添加menu
- 设置 bar 的点击事件
- 设置 点击返回按钮后 返回 前一个 aty 的方法
- 添加返回按钮(就是toolbar.setNavigationIcon() 放一个返回按钮的图片资源)或者作为 actionbar使用,使用 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 设置上行按钮,上行按钮的设置 官方描述,可理解
效果图:(方法一和方法二效果一样)
normal_menu.xml (添加的 item 菜单)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activity.WatchListStyleActivity">
<item
android:id="@+id/menu_refresh"
android:orderInCategory="2"
app:showAsAction="ifRoom"
android:title="刷新"/>
<item
android:id="@+id/menu_edit"
android:orderInCategory="1"
app:showAsAction="ifRoom"
android:title="编辑"/>
<item
android:id="@+id/action_item1"
android:title="item_01"
app:showAsAction="never" />
</menu>
第一种方法:
如果是第一种方式使用的 toolbar 方式(即自定义Theme后的使用)
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle("标题");
toolbar.setNavigationIcon(R.mipmap.ic_launcher_round); // 点击返回上一个 aty
toolbar.inflateMenu(R.menu.normal_menu); //填充菜单 item
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.action_item1) {
Toast.makeText(MainActivity.this, "对了", Toast.LENGTH_SHORT).show();
}else if (menuItem.getItemId() == R.id.menu_refresh)
{
Toast.makeText(MainActivity.this, "刷新", Toast.LENGTH_SHORT).show();
}
return false;
}
});
第二种方法:(即修改ActionBar的显示方式后的使用)
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle("标题");
toolbar.setNavigationIcon(R.mipmap.ic_launcher_round);
setSupportActionBar(toolbar);
getSupportActionBar();
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
需要实现这两个方法
// 实现这两个方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.normal_menu,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_item1) {
Toast.makeText(this, "对了", Toast.LENGTH_SHORT).show();
}else if (item.getItemId() == R.id.menu_refresh)
{
Toast.makeText(this, "刷新", Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
toolbar 的其他方法
-
toolbar.setXXX( ) // 慢慢试
其他关于 toolbar的 效果参考
效果图:如: