26

我想在我的 AppCompat 工具栏中更改默认的 ActionBar homeAsUp 指示器(可绘制)。如何做到这一点?仅显示默认箭头。

样式(其他 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>

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

<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" />

在片段中:

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

        activity.setSupportActionBar(toolbar);

        ActionBar actionBar = activity.getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowTitleEnabled(false);
4

6 回答 6

32

要更改图标,只需在运行时调用:

toolbar.setNavigationIcon(R.drawable.home);

样式/主题不起作用的技巧。

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

于 2014-11-06T11:29:30.090 回答
19

只需将此行添加到您的 styles.xml

        <item name="navigationIcon">@drawable/ic_back_arrow</item>
于 2015-12-04T14:17:04.570 回答
17

我试过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 );
}

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

于 2014-12-05T03:28:31.380 回答
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);

要显示 homeAsUpIndicator 指示器而不是 home 指示器,请执行以下操作:

mDrawerToggle.setDrawerIndicatorEnabled(false);

文件:

ActionBarDrawerToggle#setHomeAsUpIndicator ActionBarDrawerToggle#setDrawerIndicatorEnabled

于 2015-02-23T07:38:14.360 回答
3

我刚刚发现它实际上可以工作 toolbar.setNavigationIcon(R.drawable.ic_action_back) ,这是使它工作的代码。

  @Override
   protected void onCreate(Bundle savedInstanceState) {

   .....
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setNavigationIcon(R.drawable.ic_action_back);

在 onOptionsItemSelected(MenuItem item) 中发布以下代码

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   ......
    if (id == android.R.id.home) {
        startActivity(new Intent(this, MainActivity.class));
        return true;
    }

    return super.onOptionsItemSelected(item);
}

注意此代码中的 Mainactivity 是我希望我的后退或主页按钮转到的当前活动。我希望这有帮助

于 2016-07-12T09:55:56.557 回答
2

不幸的是,如果此样式线用于与 App 中的其他活动(包括主活动)共同共享的 AppCompat ToolBar/App 栏中,则指定的“ navigationIcon ”将自动显示,这与标准默认HomeAsUpIndicator不同,除非在 Activity 中根据需要显式启用,通常如下所示:(在onCreate()中)

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

对于上面的样式行,由于它的行为方式相反,以类似的方式,如果不希望显示该指标,则需要显式禁用它,如在主活动中,如下所示:(在onCreate() )

getSupportActionBar().setDisplayHomeAsUpEnabled(false);

(在 Android 4.0.4、4.3 和 4.4.2 手机上观察到)

于 2016-05-12T21:14:31.783 回答