Toolbar 和 Actionbar 之间的关系,使用toolbar,如,添加menu,设置menu点击事件,返回按钮的设置

本博客内容:

  1. toolbar 与actionBar的关系
  2. 使用toolbar
  3. toolbar 的使用方法,如,添加menu,设置menu点击事件,返回按钮的设置
ToolBar作为新特性替代ActionBar,toolbar 功能更加丰富
  1. 但是容易混淆这两个
如何使用 方法1. 变化 ActionBar 为 toolbar ,方法2.使用toolbar
  1. 看主题 styles.xml(如果是这样带有 ActionBar的类似Theme)
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
使用方法:

关键点:

  1. styles.xml 应用 的主题下添加下列话(新建一个主题NoActionBar的主题)
    <style name="AtyTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
    </style>
  1. AndroidManifest.xml 给对应的 activity 设置主题
<activity android:name=".MainActivity"
    android:theme="@style/AtyTheme">
            。。。
</activity>
  1. 在 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"/>
  1. MainActivity.java
Toolbar toolbar = findViewById(R.id.toolbar);  // 这样就可以设置其他的参数了
setSupportActionBar(toolbar );   // 调用 Activity 的 setSupportActionBar() 方法,然后传递 Activity 的工具栏。该方法会将工具栏设置为 Activity 的应用栏。
// 至此可以调用原生ActionBar的方法
toolbar .hide() ;    //隐藏应用栏
第二种使用方法(不推荐)

Toolbar作为导航条
不同之处,不添加新的主题

  1. 在应用自带主题下添加
    styles.xml
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
  1. 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"/>
  1. MainActivity.java
        Toolbar toolbar = findViewById(R.id.toolbar);
        toolbar.setTitle("标题");
        setSupportActionBar(toolbar);
        getSupportActionBar();

扩展其他的一些使用方法:

  1. 添加menu
  2. 设置 bar 的点击事件
  3. 设置 点击返回按钮后 返回 前一个 aty 的方法
  4. 添加返回按钮(就是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 的其他方法

  1. toolbar.setXXX( ) // 慢慢试

  2. Android ToolBar 使用完全解析

  3. Android开发:最详细的 Toolbar 开发实践总结

其他关于 toolbar的 效果参考

效果图:如:
在这里插入图片描述

参考链接:

Android Toolbar,你想知道的都在这里了

猜你喜欢

转载自blog.csdn.net/qq_38340601/article/details/82955207