アクション バーからロゴと backarrow+hamburger/cater の両方をクリックできるようにする必要があるという問題があります。バックスタックに何もないとき、ハンバーガー アイコンが表示され、左の引き出しが開いています (その後、アニメーションを介して矢印に変わり、引き出しを閉じます)。
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>
ましたが、役に立ちませんでした。