如何在新的AppCompat工具栏中更改HomeAsUp指示器?

das*_*sar 24 android android-actionbar-compat android-toolbar

我想在我的AppCompat工具栏中更改默认的ActionBar homeAsUp指示符(drawable).怎么实现呢?仅显示默认箭头.

样式(与其他API级别相同):

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">

        <!-- API 14 theme customizations can go here. -->
        <item name="android:windowActionBarOverlay">true</item>
        <item name="android:homeAsUpIndicator">@drawable/home</item>

        <!-- Support library compatibility -->
        <item name="windowActionBarOverlay">true</item>
        <item name="homeAsUpIndicator">@drawable/home</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我的片段布局中的工具栏:

<android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/my_awesome_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:homeAsUpIndicator="@drawable/home"
        android:minHeight="?attr/actionBarSize"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:theme="@style/AppTheme" />
Run Code Online (Sandbox Code Playgroud)

在片段中:

toolbar = (Toolbar) rootView.findViewById(R.id.my_awesome_toolbar);

        activity.setSupportActionBar(toolbar);

        ActionBar actionBar = activity.getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowTitleEnabled(false);
Run Code Online (Sandbox Code Playgroud)

das*_*sar 30

要在运行时调用图标:

toolbar.setNavigationIcon(R.drawable.home);
Run Code Online (Sandbox Code Playgroud)

风格/主题不起作用的伎俩.

如何使用appcompat v21在独立工具栏上启用homeAsUp或调用setDisplayHomeAsUpEnabled()

  • 注意toolbar.setNavigationIcon不能与setSupportActionBar一起使用(工具栏) (7认同)
  • 使用下面的appcompat v21代码 - > ActionBar actionbar = getSupportActionBar(); actionbar.setDisplayHomeAsUpEnabled(真); //启用actionbar.setHomeAsUpIndicator(R.drawable.ic_menu_white); //更改图标 (3认同)

Roc*_*wer 15

我试过了setHomeAsUpIndicator(int resId),它有效.

private void initToolbar ( Toolbar mToolbar ) {

    mToolbar.setTitleTextColor ( getResources ().getColor ( R.color.main_title ) );
    setSupportActionBar ( mToolbar );

    ActionBar actionbar = getSupportActionBar ();
    actionbar.setDisplayHomeAsUpEnabled ( true );
    actionbar.setHomeAsUpIndicator ( R.drawable.ic_action_back );
}
Run Code Online (Sandbox Code Playgroud)

但是mToolbar.setNavigationIcon(R.drawable.ic_action_back)不起作用:(


Ioa*_*dze 14

只需将此行添加到styles.xml即可

        <item name="navigationIcon">@drawable/ic_back_arrow</item>
Run Code Online (Sandbox Code Playgroud)

  • 截至2016年8月,这是最正确的答案.通过这种方式,您可以在一个地方更改图标,另外还有一个额外的好处就是不必调用可怕的`getSupportActionBar().setDisplayHomeAsUpEnabled(true)` (2认同)

Nik*_*huk 9

如果android.support.v7.app.ActionBarDrawerToggle与DrawerLayout和Toolbar一起使用,您可以使用以下代码更改homeAsUp图标:

//set home as up indicator
mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_up_indicator);

//remove home as up indicator
mDrawerToggle.setHomeAsUpIndicator(null);
Run Code Online (Sandbox Code Playgroud)

显示homeAsUpIndicator指标而不是主页指标执行以下操作:

mDrawerToggle.setDrawerIndicatorEnabled(false);
Run Code Online (Sandbox Code Playgroud)

文档:

ActionBarDrawerToggle#setHomeAsUpIndicator ActionBarDrawerToggle#setDrawerIndicatorEnabled