У меня проблема, когда мне нужно щелкнуть как логотип, так и задний план + гамбургер/катер из моей панели действий. когда у меня ничего нет в моей задней части, отображается значок гамбургера и открывается мой левый ящик (затем через анимацию он меняется на стрелку, чтобы закрыть ящик).Как сделать значок и логотип ящика двумя разными кнопками в ActionBar
Отображение значка рядом с AppLogo:
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
У меня есть ActionBarDrawerToggle
, чтобы проверить, если это левый ящик, который открывается (потому что у меня есть и правый ящик, который не должен мешать пиктограммам гамбургер анимации).
ActionBarDrawerToggle
mDrawerListener = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_closed) {
//must override these methods to make only left drawer change the icon of drawer in the corner, when opened
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
if (drawerView.getId() == R.id.left_drawer) {
super.onDrawerSlide(drawerView, slideOffset);
}
}
@Override
public void onDrawerOpened(View drawerView) {
if (drawerView.getId() == R.id.left_drawer) {
super.onDrawerOpened(drawerView);
}
}
@Override
public void onDrawerClosed(View drawerView) {
if (drawerView.getId() == R.id.left_drawer) {
super.onDrawerClosed(drawerView);
}
}
};
drawerLayout.setDrawerListener(mDrawerListener);
При навигации погреться можно, значок изменится на стрелку, отключив индикатор
onBackStackChanged()
@Override
public void onBackStackChanged() {
// disable drawer icon and leave backarrow icon if backstack not empty
boolean canBack = getSupportFragmentManager().getBackStackEntryCount() > 0;
if (canBack) {
mDrawerListener.setDrawerIndicatorEnabled(false);
} else {
mDrawerListener.setDrawerIndicatorEnabled(true);
}
}
В OnOptionsItemSelected()
я взять уход за левым ящиком (с правом закрытия) ИЛИ выполняется действие navigateBack.
OnOptionsItemSelected()
public boolean onOptionsItemSelected(MenuItem item) {
Helper.dismissKeyboard(this);
switch (item.getItemId()) {
case android.R.id.home:
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
onSupportNavigateUp();
} else {
if (drawerLayout.isDrawerOpen(drawerSports)) {
drawerLayout.closeDrawer(drawerSports);
} else {
if (drawerLayout.isDrawerOpen(lvMyAccount)) {
drawerLayout.closeDrawer(lvMyAccount);
}
drawerLayout.openDrawer(drawerSports);
}
}
return true;
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<style name="MyActionBar" >
<item name="android:background">@color/blue</item>
<item name="background">@color/blue</item>
<item name="android:logo">@drawable/logo_marathon</item>
<item name="logo">@drawable/logo_marathon</item>
<item name="android:displayOptions">showHome|useLogo</item>
<item name="displayOptions">showHome|useLogo</item>
</style>
...
Это не мой проект, так что я, возможно, не знаю, как точно все настроено, и я не могу внесите какие-либо существенные изменения в него, если это необходимо, поэтому мне нужно добавить метод onClick к логотипу, и я не знаю, как это сделать. Я пробовал <item name="onClick">customLogoClickMethod</item>
, но это не помогло.
Спасибо, я постараюсь это, но вы, вероятно, имел в виду 'getActionBar() setCustomView (v);' А если я использую пользовательский вид с ImageView как мой логотип я, вероятно, не». Мне нужно DISPLAY_USE_LOGO, правильно? –
Он работает! Мне просто пришлось удалить теги DISPLAY_USE_LOGO и логотипа из styles.xml и создать макет только с изображением. Еще раз спасибо, как я не думал об этом раньше! –
Не волнуйся! thanx to stackoverflow !! – vaibhav