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

时间:2014-11-06 11:24:55

标签: 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>

片段布局中的工具栏:

<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);

6 个答案:

答案 0 :(得分:29)

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

toolbar.setNavigationIcon(R.drawable.home);

使用样式/主题无法使用。

How to enable homeAsUp or call setDisplayHomeAsUpEnabled() on standalone toolbar with appcompat v21

答案 1 :(得分: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 );
}

但是mToolbar.setNavigationIcon(R.drawable.ic_action_back)无效:(

答案 2 :(得分:14)

只需将此行添加到styles.xml

即可
        <item name="navigationIcon">@drawable/ic_back_arrow</item>

答案 3 :(得分: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指标而非主页指示符执行​​以下操作:

mDrawerToggle.setDrawerIndicatorEnabled(false);

文档:

ActionBarDrawerToggle#setHomeAsUpIndicator ActionBarDrawerToggle#setDrawerIndicatorEnabled

答案 4 :(得分: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);
}

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

答案 5 :(得分:2)

不幸的是,如果此样式行用于与App中的其他活动共享的AppCompat ToolBar / App栏中,包括主要活动,&#34; navigationIcon &#34;指定将自动显示,与标准默认 HomeAsUpIndicator 不同,除非在活动中明确启用,否则不会显示,通常如下所示:(在 onCreate中()

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

使用上述样式线,由于它以相反的方式表现,以类似的方式,如果不希望显示指标,则需要明确禁用,如主要活动,如下:(在 onCreate()

getSupportActionBar().setDisplayHomeAsUpEnabled(false);

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