2013-06-10 3 views
19

У меня есть панель навигации, работающая с панелью инструментов sherlock, но у меня возникли проблемы с отображением значка 3 строки (например, gmail) вместо обычной кнопки «<». Вот мой код ic_drawer это значок 3 линии, которая использует GMAILЗначок Navigation Drawer не отображается (панель действий Шерлока)

getSupportActionBar().setIcon(R.drawable.myIcon); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setDisplayShowTitleEnabled(true); 
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawer, 
      R.drawable.ic_drawer, R.string.menu_open, R.string.menu_close) { 
     public void onDrawerClosed(View view) { 

      super.onDrawerClosed(view); 
     } 

     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
     } 
    }; 

ответ

21

Это решение сработало для меня и показало значок навигационной панели по умолчанию во всех версиях. Добавить SherlockNavigationDrawer библиотека отсюда https://github.com/nicolasjafelle/SherlockNavigationDrawer к вашему проекту. и изменить свой код, как показано ниже:

SherlockActionBarDrawerToggle mDrawerToggle = new SherlockActionBarDrawerToggle(this,mDrawerLayout, 
    R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { 
    public void onDrawerClosed(View view) { 
     super.onDrawerClosed(view); 
    } 
    public void onDrawerOpened(View drawerView) { 
     super.onDrawerOpened(drawerView); 
    } 
}; 
mDrawerLayout.setDrawerListener(mDrawerToggle); 
getSupportActionBar().setIcon(R.drawable.ic_launcher); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setDisplayShowTitleEnabled(true); 
+2

Кто-нибудь сказал вам, насколько велика ваша жизнь? Застрял в этой проблеме в течение последних нескольких часов, пока я не увидел ваш ответ. Мне жаль, что я не смог бы дать ему еще несколько бонусов! – Swayam

+0

@Swayam thnks для upvote !!! – Dory

+2

Не проблема вообще. И если я могу побеспокоить вас одной мелочью, вы заметили какое-то странное поведение в 2,3 устройствах? Попробуйте нажать любой элемент listItem в NavigationDrawer, и теперь перетащите палец вверх или вниз (не удаляя начальное нажатие). Выбирает ли все ваши списки и выделяет их в белом? Это не происходит на моем устройстве 4.3 (поэтому я предполагаю, что мой код в порядке). Но это происходит каждый раз на моем телефоне 2.3.3. Вы столкнулись с чем-то подобным? – Swayam

2

Вы можете посмотреть на this посте первыми. Существует один ответ: «Вы можете изменить обратно значок в тему

<item name="android:homeAsUpIndicator">@drawable/action_arrow</item>

Но я думаю, что вы хотите реализовать Navigation Drawer, так что читать об этом

+1

У меня есть выдвижной ящик для навигации ... как я заявил в своем вопросе. – user1634451

+0

Прошу прощения. – Borys

1

Вы добавили тумблер в свой ящик

.?
mDrawerLayout.setDrawerListener(mDrawerToggle); 
+1

У меня есть то, что добавлено – user1634451

2

Что вы можете сделать, это создать стиль, как показано ниже:

<style name="AppTheme" parent="Your Theme name"> 
     <item name="homeAsUpIndicator">@drawable/ic_drawer</item> 
</style> 

И в Android манифест применить эту тему, как:

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
</application> 

Это позволит решить проблему с получением значка 3 строки точно.

-2

Может быть, это будет работать ...

в onCreateOptionMenu раздуть макет меню getSupportMenuInflater() надуть (R.menu.action_bar_menu, меню).

+0

Я действительно раздуваю его, я не вижу, как они связаны – user1634451

+0

, на котором устройство u проверено, значок 3 строки не отображается на уровне api 2.3 или ниже. Проверьте приложение на устройстве min 4.0, если оно не протестировано или проигнорировано, если оно уже протестировано. – user1361425

+1

, используя 4.2.2, но проблема не в том, что нативная панель действий проблема с панелью действия sherlock – user1634451

40

Вы пробовали реализации метода:

mDrawerToggle.syncState(); 

Это работает для меня в прошлом.

+5

Это правильный ответ и должен быть помечен как ответ – Ran

+2

Я бы не ожидал этого требования, так как он работает из базы. , Я согласен, что это должно быть отмечено как правильный ответ. – GregM

+1

Мне пришлось добавить это в onPostCreate, чтобы получить значок, показывающий .. используя appcompat мысль, а не actionbarsherlock. – speedynomads

3

Хотя я предполагаю, что теперь вы должны проработать его, просто хотел представить ответ:

Изменить код на следующее :

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawer, 
     R.drawable.ic_drawer, R.string.menu_open, R.string.menu_close) { 
    public void onDrawerClosed(View view) { 

     super.onDrawerClosed(view); 
    } 

    public void onDrawerOpened(View drawerView) { 
     super.onDrawerOpened(drawerView); 
    } 
}; 
mDrawerLayout.setDrawerListener(mDrawerToggle); 
getSupportActionBar().setIcon(R.drawable.myIcon); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setDisplayShowTitleEnabled(true); 

по существу, параметры ActionBar, что вы настройки в коде должны быть установлены после того, как DrawerToggle было завершено, но не раньше.

+0

Я пробовал это, но не работал в устройствах pre HC. Я не получаю три строки. – Dory

0

Я положил это и он работает.

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

Метод @ zudo1337 решил мою проблему.

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

Я добавил эту строку перед вызовом setDrawerListener.

mDrawerLayout.post(new Runnable() { 
@Override public void run() { 
mDrawerToggle.syncState(); 
} 
}); 

Надеюсь, это устранит проблему на более низких устройствах.

Смежные вопросы