如何在Appcompat 22中从Hamburger图标动态更改为Up图标

时间:2015-05-06 01:05:38

标签: android android-support-library android-toolbar appcompat-v7-r22.1

我想在同一活动中给定用户输入的情况下,将ToolBar中的汉堡图标更改为向上图标("<")。

这是我的工具栏:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    app:titleTextAppearance="@style/ToolbarTitle">

on MainActivity#onCreate

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
    setSupportActionBar(toolbar);
}
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

这将显示汉堡包图标,尽管文档说明&#34;设置是否应该将主页显示为&#34; up&#34;启示&#34 ;. https://developer.android.com/reference/android/support/v7/app/ActionBar.html#setDisplayHomeAsUpEnabled(boolean)

在我的回调中,我打电话给

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);

但是它没有显示Up图标;相反,汉堡图标仍然显示。 我很困惑,因为它似乎与文档冲突。 有没有什么方法可以根据用户事件在同一个活动中的工具栏中切换汉堡包图标和向上图标?

以下是我在gradle中支持库的参考:

compile 'com.android.support:support-v4:22.1.0'
compile "com.android.support:appcompat-v7:22.1.0"

值得注意的是我的MainActivity extends AppCompatActivity

1 个答案:

答案 0 :(得分:2)

在AppCompt 22中,他们搞砸了主题。还有getSupportActionBar()。setDisplayHomeAsUpEnabled(true);现在更长时间做任何事情。除非您支持遗留问题,否则我强烈建议您不要使用setSupportActionbar,而只是直接在工具栏上执行所有调用。现在这是处理它的正确方法。

要修复主题错误,请将navigationIcon添加到主题中。您也可以直接在工具栏上进行操作,但是您必须根据具体情况对其进行处理。

    <style name="Theme.MyApp.Base" parent="Theme.AppCompat.Light.NoActionBar" >
        <item name="navigationIcon">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
    </style>

你的下一个想要使用导航绘图的ActionBarDrawerToggle V7,而不是V4 。这真是愚蠢的名字,因为现在它应该与工具栏一起使用。我不会告诉你如何在这里设置它,因为还有很多其他例子。

你需要在你的抽屉上setToolbarNavigationClickListener切换你刚才做的。当您的切换停用时,将调用此侦听器,我将在此之后讨论。在这里,我只使用onBackPressed(),即活动的方法,如果用户点击navigationIcon又称后箭头。

    drawerToggle.setToolbarNavigationClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });

现在可以非常轻松地在两者之间动态切换。如果您希望显示汉堡包图标并控制导航抽屉,则drawerToogle.setDrawerIndicatorEnabled(true);。如果您希望它显示navigationIcon并在按下时调用上述侦听器,则调用drawerToogle.setDrawerIndicatorEnabled(false);