Переключить DrawerLayout только с заголовком (NO App Icon)?

У меня есть активность с DrawerLayout . Я могу открыть ящик двумя разными способами: прокручивая левую область экрана вправо и нажав на заголовок приложения. У меня НЕ отображается значок приложения, только заголовок. Я реализовал это точно так, как рекомендовал Google здесь: Создание ящика навигации: Открыть и закрыть с помощью значка приложения

Все функционально работает, открывая и закрывая сам ящик. Однако он не отображает стандартный значок DrawerLayout который предполагается использовать. Вместо этого я получаю регулярный карет (выглядит как знак меньше).

Как только я добавлю значок приложения в ActionBar он начнет работать, как ожидалось. Значок макета ящика отображает и оживляет, когда ящик открыт или закрыт. Я попытался удалить значок приложения как в файле стилей XML, так и программно.

Есть ли способ получить значок DrawerLayout работающий без значка приложения ???

ОБНОВЛЕНИЕ: Я нашел работу, но это взломать больше, чем решение. Я просто создал прозрачный PNG размером 1×1 пиксель (blank.png) и установил его как значок своего приложения в файле styles.xml. Ниже приведен весь относительный код:

styles.xml

 <style name="MyCustomTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/MyCustomActionBar</item> <item name="android:icon">@drawable/blank</item> </style> <style name="MyCustomActionBar" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:displayOptions">showHome|showTitle|homeAsUp</item> </style> 

MainActivity -> onCreate ()

 this.navDrawerToggle = new ActionBarDrawerToggle ( this, this.navDrawerLayout, R.drawable.icon_nav_drawer, R.string.nav_drawer_open, R.string.nav_drawer_closed ) { public void onDrawerClosed(View view) {} public void onDrawerOpened(View drawerView) {} }; 

MainActivity -> onPostCreate ()

 super.onPostCreate(savedInstanceState); this.navDrawerToggle.syncState(); 

MainActivity -> onResume ()

 this.navDrawer.setOnItemClickListener(new DrawerItemClickListener()); this.navDrawerLayout.setDrawerListener(this.navDrawerToggle); 

MainActivity -> onPause ()

 this.navDrawer.setOnItemClickListener(null); this.navDrawerLayout.setDrawerListener(null); 

MainActivity -> onConfigurationChanged (Конфигурация newConfig)

 super.onConfigurationChanged(newConfig); navDrawerToggle.onConfigurationChanged(newConfig); 

MainActivity -> onOptionsItemSelected (элемент MenuItem)

 if (this.navDrawerToggle.onOptionsItemSelected(item)) {return true;} else { // A bunch of item click handling happens here... return true; } 

getActionBar().setIcon(android.R.color.transparent);

Это сработало для меня …..;)

Мне было интересно об этом, поэтому я попробовал его с образцом для DrawerLayout, и он отлично работал. Кроме того, кажется, что вам нужно использовать свой собственный значок ящика, он рекомендуется в любом случае. Вы можете загрузить активы по умолчанию с этого сайта. Создайте ящик навигации и поместите их в свою соответствующую папку с доступными ресурсами.

Вот что сработало для меня:

 ActionBar actionBar = getActionBar(); // Let's get rid of the app icon here actionBar.setIcon(null); actionBar.setTitle("App Name"); // Setting these 3 options allows us to show the title as well as a "Home" elements // "Home" elements include the Up and/or Drawer icon. The DISPLAY_HOME_AS_UP will enable // and show the Drawer icon, we'll be "replacing" the "up" button with the drawer icon below actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP); // Get a reference of the DrawerLayout DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerLayout.setDrawerListener(drawerToggle); // Setting ActionBarDrawerToggle will allow you to set the drawables for the drawer // (this will also give you the nice/smooth animation) as well as allow you to do some // other things depending on the events: onDrawerClosed & onDrawerOpened. ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle( this, /* host Activity */ drawerLayout, /* DrawerLayout object */ R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ R.string.drawer_open, /* "open drawer" description for accessibility */ R.string.drawer_closed /* "close drawer" description for accessibility */ ) { public void onDrawerClosed(View view) { actionBar.setTitle("Closed..."); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } public void onDrawerOpened(View drawerView) { actionBar.setTitle("Open..."); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; // Set a listener to be notified of drawer events. drawerLayout.setDrawerListener(drawerToggle); 

UPDATE: похоже, что андроид: displayOptions в стиле ActionBar не учитываются. Вместо этого используйте actionBar.setDisplayOptions (int options).

После установки переключателя выдвижного ящика необходимо вызвать следующий метод:

  mDrawerToggle.syncState(); 

Поэтому ваш код будет выглядеть так:

  mDrawerToggle = new ActionBarDrawerToggle( this, /* host Activity */ mDrawerLayout, /* DrawerLayout object */ R.drawable.ic_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) { actionBar.setTitle(mTitle); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } public void onDrawerOpened(View drawerView) { actionBar.setTitle("Preview Mode"); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; mDrawerToggle.syncState(); mDrawerLayout.setDrawerListener(mDrawerToggle);