工具栏导航图标从未设置

我正在尝试新的工具栏组件,导航图标有些麻烦。 我想实现一个自定义的图标进行后退导航:

在我的清单中,我设定了一位家长参加我的活动:

<activity android:name=".CardsActivity" android:parentActivityName=".MainActivity"> <!-- Parent activity meta-data to support API level 7+ --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> 

我声明这样的工具栏:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.example.lollitest.MainActivity" > <android.support.v7.widget.Toolbar android:id="@+id/my_awesome_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:layout_marginBottom="10dp" android:background="?attr/colorPrimary" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/my_awesome_toolbar" android:text="@string/hello_world" /> </RelativeLayout> 

然后在我的活动中,我configuration工具栏像这样:

 Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); toolbar.setNavigationIcon(R.drawable.ic_good); toolbar.setTitle("Title"); toolbar.setSubtitle("Sub"); toolbar.setLogo(R.drawable.ic_launcher); setSupportActionBar(toolbar); 

哪给我: 与后退按钮的工具栏

后面的图标不是我用setNavigationIcon()设置的图标! 无论我给该方法提供的是什么,导航图标总是后退箭头。

我试图删除清单中的父协会,但唯一的影响是(显然)阻止button回来。

相反,如果我想要默认后退箭头图标,不要调用setNavigationIcon()我根本没有任何图标。

什么是正确的方式来处理工具栏中的导航图标(自定义和默认)?

NOte:我在Android 4.4上运行我的testing

目前你可以使用它,改变顺序:(这似乎是一个错误)

 Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.ic_good); toolbar.setTitle("Title"); toolbar.setSubtitle("Sub"); toolbar.setLogo(R.drawable.ic_launcher); 

具体到导航图标,这是正确的顺序

 // get the actionbar as Toolbar and set it up Toolbar toolbar = (Toolbar) findViewById(R.id.signIn_toolbar); setSupportActionBar(toolbar); 

通知工具栏提供后退导航。 这会将图标设置为默认材质图标

 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

稍后用自定义的覆盖图标,在我的情况下是全息图标

 toolbar.setNavigationIcon(R.drawable.ic_chevron_left_white_36dp); 

(对user802421的回答)

 private void setToolbar() { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.ic_action_back); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); } } 

toolbar.xml

 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="@dimen/toolbar_height" android:background="?attr/colorPrimaryDark" /> 

我试图build立像@Gabriele Mariotti这样的工具栏,但是我有一些题目问题。 那么我就下定单了

 toolbar.setTitle("Title") setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.ic_good); 

它的工作。

我刚刚find解决scheme。 这真的很简单:

 mDrawerToggle.setDrawerIndicatorEnabled(false); 

希望它会帮助你。

我用下面的方法真的是以上所有的难题。 我也发现onOptionsItemSelected从未激活。

  mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBar().setHomeButtonEnabled(true); Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); if (toolbar != null) { toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); } 

您可以使用invalidate()方法在任何地方更改工具栏状态。 例:

 Toolbar toolbar = (Toolbar)findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.mipmap.arrow_white); toolbar.invalidate(); // restore toolbar 

使用setNavigationIcon来改变它。 不要忘记先创buildActionBarDrawerToggle!

示例代码为我工作:

  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); drawer = (DrawerLayout)findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState(); toolbar.setNavigationIcon(R.drawable.ic_menu); 

我有simillar问题。 我发现一个很大的头痛后,我的ActionBarDrawerToggle正在修改图标,也不应该修改图标(因为我没有提供切换组件的工具栏的参考)。 所以在我设置的setUp(...)方法的NavigationDrawerFragment类(处理打开和closures)中
mDrawerToggle.setHomeAsUpIndicator(R.drawable.app_icon);
最后它的工作。

如果已添加,请从活动中删除此行

  @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); } 

然后设置图标

  getSupportActionBar().setHomeAsUpIndicator(icon); 

尝试这个:

  <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:toolbar="http://schemas.android.com/apk/res-auto" android:id="@+id/tool_drawer" android:layout_width="match_parent" android:layout_height="?actionBarSize" toolbar:navigationIcon="@drawable/ic_navigation"> </android.support.v7.widget.Toolbar> 

为我工作…

 <android.support.v7.widget.Toolbar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/toolBar" android:background="@color/colorGreen" app:title="Title" app:titleTextColor="@color/colorBlack" app:navigationIcon="@drawable/ic_action_back"/>