ActionBarのロゴの表示/非表示を切り替える。

最近はActionBarを利用していないアプリはめっきり見かけなくなったこの頃。

ActionBarを利用してて、ActionBar.setLogo メソッドを利用して、Fragmentごとにロゴを表示したり、非表示にしたりしたいと思い色々調べたら、なかなかうまく表示されなかったので、まとめておく。

動作

ホーム画面だけロゴを出す。左メニュー(Navigation Drawer)を利用してFragmentを切り替えた時に、ホーム画面以外の場合はアイコンとページ名をActionBarに表示させる。

画面イメージ

f:id:sharakova:20140628171159p:plain

f:id:sharakova:20140628171209p:plain

Activity

public class BaseActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getActionBar().setDisplayShowHomeEnabled(true);
        getActionBar().setDisplayShowCustomEnabled(true);
        getActionBar().setLogo(R.drawable.logo_white); // ホーム画面のロゴ
        getActionBar().setIcon(R.drawable.icon_menu_popular); // ホーム以外で表示するアイコン
        getActionBar().setDisplayUseLogoEnabled(false); // ロゴを非表示 
    }
}

ホーム画面のFragment

setDisplayUseLogoEnabledをtrueにすると、アイコンは自然と消えロゴだけが表示されるようだ。

final class HomeFragment extends Fragment {
    @Override
    public void onResume() {
        super.onResume();
        getActivity().getActionBar().setTitle("");   // タイトル空
        getActivity().getActionBar().setDisplayUseLogoEnabled(true); // ロゴを表示
    }
}

その他 Fragment

setDisplayUseLogoEnabledで、ロゴを非表示にするだけで、Activityでセットしたアイコンが表示される。

final class PopularFragment extends Fragment {
    @Override
    public void onResume() {
        super.onResume();
        getActivity().getActionBar().setTitle("注目ユーザー");   // タイトル
        getActivity().getActionBar().setDisplayUseLogoEnabled(false); // ロゴを非表示
    }
}