Android的DrawerLayout不显示正确的指标图标

我正在尝试使用新的DrawerLayout作为列表。 问题是,虽然我设置了抽屉监听器,但是操作栏上的指示器仍然是箭头图标,而不是我想绘制的三线图标。 以下是OnCreate函数:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_front_page); // Swiping Pager set up mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); // Sliding Drawer set up mHabitContract = new HabitsContract(this); mDrawerLayout = (DrawerLayout) findViewById(R.id.front_page_layout); mDrawerList = (ListView) findViewById(R.id.habit_list); mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); mDrawerList.setAdapter(new HabitAdapter(mHabitContract.GetHabitItems(), this)); // Fixme: Indicator image doesn't show up mDrawerToggle = new ActionBarDrawerToggle( this, /* host Activity */ mDrawerLayout, /* DrawerLayout object */ R.drawable.ic_navigation_drawer, /* nav drawer image to replace 'Up' caret */ R.string.drawer_open, /* "open drawer" description for accessibility */ R.string.drawer_close /* "close drawer" description for accessibility */ ) { public void onDrawerClosed(View view) { //getActionBar().setTitle(mTitle); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } public void onDrawerOpened(View drawerView) { //getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; mDrawerLayout.setDrawerListener(mDrawerToggle); // Action Bar set up getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); getActionBar().setDisplayShowHomeEnabled(true); } 

谁能帮忙?

更新:我发现了这个问题。 我添加了onPostCreate函数如下,现在它正在工作。

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

Solutions Collecting From Web of "Android的DrawerLayout不显示正确的指标图标"

您需要从syncState()调用ActionBarDrawerToggle对象的onPostCreate()

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

对于那些正在寻找这个或到这里寻找答案的人:你必须使用DrawerToggle support.v7。 按照我的使用方法:

 drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_opened, R.string.drawer_closed){ public void onDrawerClosed(View view){ //actionBar.setTitle(mTitle); invalidateOptionsMenu(); // crea la llamada para onPrepareOptionsMenu } public void onDrawerOpened(View view){ //actionBar.setTitle(mDrawerTitle); invalidateOptionsMenu(); // crea la llamda para onPrepareOptionsMenu } }; 

这工作正常,有一个animation,岩石!

您正在使用的图标称为“ic_navigation_drawer”。 您可以检查它是否正确,因为Google在官方指南( http://developer.android.com/training/implementing-navigation/nav-drawer.html )中提供的图标称为“ic_drawer”。

还要检查如果自定义ActionBar主题是定义到您的项目style.xml文件与条件android:displayOptions=showTitle 。 喜欢这个:

  <style name="OrangeBar" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:displayOptions">showTitle</item> ... </style> 

它可以破坏抽屉指标。 为了避免在android:displayOptions添加showHome

  <item name="android:displayOptions">showHome|showTitle</item>