用AppCompat v21开发Material Design主题应用

为了在老的 Android 平台上引入 Material Design 主题,Support Libraries 又升级了。在 AppCompat v21 中包含了这一主题。注意,只包含了主题,动画(transitions )并不向后兼容。

在本文中,我们将介绍如何集成 AppCompat v21 库,开发使用 Material Design 主题且能向后兼容 Lolipop 之前版本设备的应用。

为了实现这一目标,我们需要进行下面几个步骤:

  • 升级SDK

  • Gradle版本设置

  • 设定主题

  • 去掉ActionBar添加Toolbar

  • Activity继承自ActionBarActivity

Gradle 版本设置

在将 SDK 升级到最新版后,需要检查 Gradle 中的版本设置:

build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "com.example.maxiee.wintest"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.0'
}

从中可以看出,最低 SDK 版本可以兼容到14。

指定 Material 主题

主题应当继承自 Theme.AppCompat ,这个主题包含了向后兼容的 Material Design 。

values/themes.xml 的内容:


    

第4、5行是配色,我们选择了 Material Design 提供的两种。

第6、7行中我们不显示 ActionBar 。这是因为 Lolipop 版本引入了一个 ActionBar 的替代者 ToolBar ,我们隐藏 ActionBar ,在下面的步骤中添加 ToolBar 。

设置Toolbar

ToolBar 与 ActionBar 最大的不同就是:ToolBar 现在是布局 Layout 的一部分了,这个改变的意义在于,我们可以对 ToolBar 设置动画、抽屉遮盖等等。

首先,我们要在布局中添加 ToolBar(当做 View 来看待,是不是跟 ActionBar 不同了?)

layout/activity_main.xml内容:



    

    


第8~12行中是我们新添加的 ToolBar 。

Activity 继承自 ActionBarActivity

使用 ToolBar ,我们必须要让我们的 activities 继承自 ActionBarActivity 。

在 MainActivity.java 里:

public class MainActivity extends ActionBarActivity {

之后我们要在 onCreate 函数里添加 ToolBar 。

在 MainActivity.java 里:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
    if (toolbar != null) {
        setSupportActionBar(toolbar);
    }
}

总结

现在,我们运行程序,就能看到应用的主题已经应用了 Material Design ,并且还是用了新的 ToolBar 。效果图如下:

app

本文仅是对 AppCompat v21 进行了一个基础的整合。在此之上大有文章可做。虽然 Lolipop 的动画系统不向后兼容,但仍然有办法来实现。具体的可以参考下方的参考链接。

参考链接

AppCompat v21 — Material Design for Pre-Lollipop Devices!

Material Design Everywhere: Using AppCompat 21