Android-Toolbar详细学习

2017/6/9 posted in  Android

Toolbar是简单使用

1、在应用的build.gradle中添加v7 appcompat支持库。

com.android.support:appcompat-v7:24.1.1

2、让Activity继承自AppCompatActivity。

public class MyActivity extends AppCompatActivity {
  // ...
}

3、在AndroidManifest.xml文件中,设置元素使用appcompat中的某个NoActionBar主题,从而来去除使用ActionBar来提供操作栏。

<application android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>

4、在activity的布局中添加Toolbar。

<android.support.v7.widget.Toolbar
 android:id="@+id/my_toolbar"
 android:layout_width="match_parent"
 android:layout_height="?attr/actionBarSize"
 android:background="?attr/colorPrimary"
 android:elevation="4dp"
 android:theme="@style/ThemeOverlay.AppCompat.ActionBar"  
 app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

5、在activity的onCreate()方法中,调用setSupportActionBar()方法,并传入toolbar,这样就会将toolbar设置为activity的操作栏了。

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my);
  Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar);
  setSupportActionBar(toolbar);
}

Toolber复用

应用中有很多界面,每个Activity一般都需要操作栏,且大多数activity的操作栏的元素是一致的,那每个布局文件里面都写这么多资源文件是累赘的。因此可以对Toolbar进行复用,使得布局文件看起来更精炼,更改Toolbar整体效果,如背景之类的可以更方便。

首先,在布局文件toolbar.xml中定义Toolbar。

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:contentInsetLeft="0dp"
    android:contentInsetStart="0dp"
    android:elevation="4dp"
    android:theme="@style/ToolbarTheme"
    app:navigationIcon="@drawable/icon_back"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:titleTextAppearance="@style/Toolbar.TitleText">

    <!--  any custom view -->

</android.support.v7.widget.Toolbar>

之后,在需要添加Toolbar的地方引入这个布局资源。

<include
  layout="@layout/toolbar"/>

最后,在BaseActivity(一般app都会有)中的onCreate()方法设置Toolbar。注意,这个时候Activity不再继承AppCompatActivity,而是继承BaseActivity,而BaseActivity继承AppCompatActivity。BaseActivity部分代码如下:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    if (toolbar != null) {
        setSupportActionBar(toolbar);

        mToolbarHelper = new ToolbarHelper(toolbar);

        hanldeToolbar(mToolbarHelper);
    }
}

protected void hanldeToolbar(ToolbarHelper toolbarHelper) {}

public static class ToolbarHelper {

    private Toolbar mToolbar;

    public ToolbarHelper(Toolbar toolbar) {
        this.mToolbar = toolbar;
    }

    public Toolbar getToolbar() {
        return mToolbar;
    }

    public void setTitle(String title) {
        TextView titleTV = (TextView) mToolbar.findViewById(R.id.toolbar_title);
        titleTV.setText(title);
    }
}

代码中首先获取到Toolbar将其设置为操作栏,之后创建了一个ToolbarHelper对象,ToobarHelper主要是封装了下Toolbar,并提供操作自定义View的方法。然后调用hanldeToolbar()方法,子Activity通过重写这个方法,可以对Toolbar进行定制操作。