ActionBarDrawerToggle не устанавливает индикатор ящика
Я пытаюсь добавить ящик навигации в свое приложение. Все работает нормально. Но теперь у меня все еще есть значок стрелки, хотя я заменил его на ic_drawer с Android? Здесь мой код:
private ActionBarDrawerToggle mDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ExpandableListView mDrawerList = (ExpandableListView) findViewById(R.id.left_drawer);
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
GravityCompat.START);
mDrawerList.setAdapter(new DrawerListAdapter(this));
mDrawerList.setOnChildClickListener(new DrawerItemClickListener());
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_launcher, R.string.drawer_open,
R.string.drawer_close);
Log.d("Mudit",
"mDrawerToggle" + mDrawerToggle.isDrawerIndicatorEnabled()); // returns true
mDrawerLayout.setDrawerListener(mDrawerToggle);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayShowHomeEnabled(false);
}
/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
XML:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
<ExpandableListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#ffffff"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
Я просматриваю различные примеры кода онлайн, но все они делают то же самое. Я не знаю, почему он не работает для меня.
Пожалуйста, помогите.
Ответы
Ответ 1
Вам нужно будет использовать
getActionBar().setDisplayShowHomeEnabled(true);
вместо
getActionBar().setDisplayShowHomeEnabled(false);
Приветствия,
Феликс
EDIT: здесь, как скрыть значок через XML:
добавьте это в свои styles.xml: (Замените android: Widget.Holo.Light.ActionBar.Solid с android: Widget.Holo.ActionBar.Solid, если вы используете панель темных действий)
<style name="ActionBarStyle" parent="android:Widget.Holo.Light.ActionBar.Solid">
<item name="android:icon">@android:color/transparent</item>
</style>
а затем добавьте это в свою тему, определенную вами в AndroidManifest.xml(Standard - это AppBaseTheme в /res/values -v11/styles.xml - AppBaseTheme:
<item name="android:actionBarStyle">@style/ActionBarStyle</item>
Надеюсь, это поможет!
Ответ 2
попробуйте этот код
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
actbardrawertoggle.syncState();
}
Ответ 3
Просто добавьте следующую строку внутри метода showGlobalContextActionBar() (класс NavigationDrawerFragment.java)
actionBar.setHomeAsUpIndicator(R.drawable.ic_action_menu);
Фрагмент кода:
private void showGlobalContextActionBar() {
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_action_menu);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setTitle(R.string.app_name);
}
Ответ 4
Это сработало для меня, когда я хотел вернуть значок меню со стрелки назад
private void updateNavigationIcon() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0
&& getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
toggle.syncState();
}
}