ToolBar 简单使用

ToolBar 简单使用

ToolBar 是在 android 5.0之后推出的一款用来替代 ActionBar 的 View。ActionBar 是Activity的一部分,不能用在其他视图层次上(自定义的 actionBar 除外)。而 ToolBar 可以用于任何层次的视图,没有和 Activity 之间有绑定的关系。使用起来也更加的灵活多变。

ToolBar 中可以含有多样的元素

  • Navigation Button

  • Branded Logo Image

  • Title And SubTitle

  • Custom Views

  • Action Menu

一个导航按钮

branded logo image

一个品牌logo

title and subtitle

标题和子标题

custom views

一个或多个自定义视图

action menu

一个菜单

使用

  1. 引入相关的依赖
compile 'com.android.support:appcompat-v7:27.1.1'
  1. activity继承自 AppCompatActivity
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
  1. 设置主题为NoActionBar
在当前的style中添加这2条就可以不显示actionbar
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
  1. 布局中引入ToolBar
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.test.toolbardemo.toolbardemo.MainActivity">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:background="?colorPrimary"
        app:title="Title"
        app:subtitle="subtitle"
        android:gravity="center_vertical"
        app:navigationIcon="@mipmap/ic_launcher"
        app:logo="@mipmap/ic_launcher_round"
        android:layout_height="wrap_content">
        <!-- 可以在这里自己定义自己的 actionbar 布局 -->
    </android.support.v7.widget.Toolbar>

</LinearLayout>
  1. 在activity中进行actionbar的设置等
public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();
    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);

        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                //如果处理了点击事件就返回true

                switch (item.getItemId()){
                    case R.id.menu_add:
                        Log.i(TAG, "onMenuItemClick: Add");
                        break;
                    case R.id.menu_update:
                        Log.i(TAG, "onMenuItemClick: Update");
                        break;
                    case R.id.menu_about:
                        Log.i(TAG, "onMenuItemClick: About");
                        break;
                    case R.id.menu_delete:
                        Log.i(TAG, "onMenuItemClick: Delete");
                        break;
                    case R.id.menu_query:
                        Log.i(TAG, "onMenuItemClick: Query");
                        break;
                }
                Log.i(TAG, "onMenuItemClick: ");
                return true;
            }
        });

    }

    //后续处理菜单和菜单的点击事件和之前的menu的使用方式类似

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //设置menu
        getMenuInflater().inflate(R.menu.toolbar,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //处理导航按钮的点击事件,已经处理了就返回true
        if(item.getItemId() == android.R.id.home){
            Log.i(TAG, "onOptionsItemSelected: Navigation");
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
  1. menu菜单文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_add" android:title="add"></item>
    <item android:id="@+id/menu_delete" android:title="delete"></item>
    <item android:id="@+id/menu_update" android:title="update"></item>
    <item android:id="@+id/menu_query" android:title="delete"></item>
    <item android:id="@+id/menu_about" android:title="about"></item>
</menu>
  1. 测试
    logcat捕获的日志
07-20 02:20:07.785 1826-1826/com.test.toolbardemo.toolbardemo I/MainActivity: onOptionsItemSelected: Navigation
07-20 02:20:15.217 1826-1826/com.test.toolbardemo.toolbardemo I/MainActivity: onMenuItemClick: Update
07-20 02:20:15.217 1826-1826/com.test.toolbardemo.toolbardemo I/MainActivity: onMenuItemClick: 
  1. 解决个小问题
    在使用的过程中,android studio 创建工程时提示支持了appcompat-v7:28+,我自己修改为自己需要用的23,之后就是一致出问题,发现只有compileSDKVersion,buildToolsVersion以及support库的版本一致时才正常,统一修改为23之后,发现提示我
Error:The SDK Build Tools revision (23.0.3) is too low for project ':app'. Minimum required is 25.0.0
<a href="install.build.tools">Install Build Tools 25.0.0, update version in build file and sync project

之后上网找了下,是因为工程的gradle插件版本要求最低支持到25,就是在project.build文件中的插件配置

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

这时候可以选择是降低gradle插件的版本或者是提高sdk的版本,我选择了提高sdk的版本

完整的app.gradle代码

apply plugin: 'com.android.application'
// compileSdkVersion,buildToolsVersion,support库的大版本必须一致,不然一堆问题
android {
    compileSdkVersion 25
    buildToolsVersion '25.0.3'
    defaultConfig {
        applicationId "com.test.toolbardemo.toolbardemo"
        minSdkVersion 23
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

posted on 2018-07-20 14:39 成长记录 阅读() 评论() 编辑 收藏

版权声明:本文为android-lol原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/android-lol/p/9341339.html