Android API 19 的工具栏? (对于 API 21 工作正常)

Android Toolbar for API 19? (for API 21 works ok)

我用过How do I use DrawerLayout to display over the ActionBar/Toolbar and under the status bar? Suyash 的答案(我还添加了一个工具栏,可能不正确)将导航抽屉放在 "action bar".

对于 API 级别 21 而不是 "action bar" 我使用了工具栏,它工作正常。

但是对于 API 19 这不起作用:

    if(Build.VERSION.SDK_INT > 19) {
      final Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
        setSupportActionBar(toolbar);
    }

您知道如何在 API 级别 19 时将 NavigationDrawer 放在 "actionbar"(或工具栏)上吗?

如果您使用工具栏,那么您应该能够在任何 API.

中查看完全相同的工具栏

为此你应该在 res/layout 中有一个 XML:

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"/>

并且在你的主要布局中你应该包括它:

<include
    android:id="@+id/app_bar"
    layout="@layout/app_bar" />

此外,您还应该将 styles.xml

上的样式设置为无操作栏
<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primaryDark</item>
    <item name="colorAccent">@color/accent</item>
</style>

但是对于 API 21 你应该有另一个 styles.xml:

<style name="AppTheme" parent="AppTheme.Base">
    <item name="android:colorPrimary">@color/primary</item>
    <item name="android:colorPrimaryDark">@color/primaryDark</item>
    <item name="android:colorAccent">@color/accent</item>
</style>

最后在您的 Main Activity

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

最后,对于您想对工具栏执行的任何操作,获取它并像对待旧的 Action Bar 一样对待它:

getSupportActionBar().setHomeAsUpEnabled(true);

Material Design for Pre-Lollipop Devices :

All of your themes (that want an Action Bar/Toolbar) must inherit from Theme.AppCompat. There are variants available, including Light and NoActionBar.

When inflating anything to be displayed on the action bar (such as a SpinnerAdapter for list navigation in the toolbar), make sure you use the action bar’s themed context, retrieved via getSupportActionBar().getThemedContext().


Android Support Library 22.1 :

AppCompat allows you to use android:theme for Toolbars (deprecating the app:theme used previously) and, even better, brings android:theme support to all views on API 11+ devices.

首先,您需要添加 com.android.support:appcombat-v7:25.3.0 作为依赖项。然后导入android.support.v7.widget.Toolbar到你要添加工具栏的activity。通过这种方式,您可以实现 api 19 .

的工具栏

AndroidX

如果您不想使用 android 支持库。现在有一个更好的解决这个问题的方法

androidx.appcompat.widget.Toolbar

Migrating to AndroidX Class Mappings available through this official link

此外,您还可以直接从 Android Studio 将整个项目折射到 AndroidX: 从菜单你可以做
重构 > 迁移到 AndroidX

More information here

此外,对我来说 Refractor > Migrate to AndroidX 功能没有将我在 xml 中的工具栏转换为 AndroidX 所以,我发现以前的 link 真的有帮助。