[关闭]
@XingdingCAO 2017-04-30T14:03:29.000000Z 字数 4991 阅读 5125

使用ToolBar代替AppCompatActivity中的ActionBar

Android Toolbar AppCompatActivity Actionbar


部分译自:https://guides.codepath.com/android/Using-the-App-Toolbar
图片引用:http://blog.mosil.biz/2014/10/android-toolbar/
Google文档:https://developer.android.com/training/appbar/index.html#SplitBar

首先明确ActionBar(也叫App Bar)的作用:固定在整个应用的顶部,显示一些导航信息。其中可以包含:

Google官方定义:

应用栏AppBar也称操作栏Actionbar,是应用活动中最重要的一项设计元素,因为它为用户提供了熟悉的视觉结构和交互元素。使用应用栏可让您的应用与其他 Android 应用保持一致,允许用户快速了解如何使用您的应用并获得一流的体验。应用栏的主要功能包括:

为什么要用ToolBar替代ActionBar

兼容的安卓版本

ToolBar是在安卓5.0中引入的(android.widget.Toolbar)。在不引入兼容库的情况下,只能在5.0以上的版本运行;而在引用android.support.v7.widget.Toolbar类之后,可以支持安卓2.1以上版本。

下面开始动手

  1. //build.gradle
  2. compile 'com.android.support:appcompat-v7:25.3.0'
  1. <!--AndroidManifest.xml-->
  2. <application
  3. android:allowBackup="true"
  4. android:icon="@mipmap/ic_launcher"
  5. android:label="@string/app_name"
  6. android:supportsRtl="true"
  7. android:theme="@style/AppTheme
  8. <!--修改AppTheme的定义-->
  9. >
  1. <!--styles.xml-->
  2. <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. xmlns:app="http://schemas.android.com/apk/res-auto"
  6. android:id="@+id/activity_main"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent"
  9. tools:context="me.zxm.learnactionbartoolbar.MainActivity"
  10. >
  11. <android.support.v7.widget.Toolbar
  12. android:id="@+id/ToolBar"
  13. android:minHeight="?attr/actionBarSize"
  14. android:layout_width="match_parent"
  15. android:layout_height="wrap_content"
  16. app:titleTextColor="@android:color/white"
  17. android:background="?attr/colorPrimary"
  18. ></android.support.v7.widget.Toolbar>
  19. </RelativeLayout>
  1. public class MainActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. setSupportActionBar((Toolbar) findViewById(R.id.ToolBar));
  7. }
  8. }

再定制一下ToolBar的样式

第二个写错了(应该是setLogo
ToolBar的组成

  1. package me.zxm.learnactionbartoolbar;
  2. import android.support.v7.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.support.v7.widget.Toolbar;
  5. import android.view.Menu;
  6. public class MainActivity extends AppCompatActivity {
  7. private Toolbar toolbar;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. toolbar = (Toolbar) findViewById(R.id.ToolBar);
  13. toolbar.setNavigationIcon(R.mipmap.ic_launcher);
  14. //原文写到必须在setSupportActionBar后调用,我测试后发现并不需要
  15. toolbar.setLogo(R.mipmap.ic_launcher);
  16. toolbar.setTitle("ToolBar");
  17. //如果未调用setTitle,在setSupportActionBar时,
  18. //就会自动把Title设置为:
  19. //在AndroidManifest.xml中声明、在strings.xml定义的
  20. //android:label(默认为应用名)。
  21. toolbar.setSubtitle("toolbar");
  22. setSupportActionBar(toolbar);
  23. }
  24. }

最后的几句话

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注