20

アプリのロゴ/テキストなしで、集中化された画像を使用してアクションバーを作成しようとしていますが、カスタムビューで可能であることはわかっています。ここに私のコードがあります:

protected void initActionBar()
{
    RelativeLayout custom = new RelativeLayout(getApplicationContext());
    ActionBar.LayoutParams params = new ActionBar.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    custom.setLayoutParams(params); 

    custom.setGravity(Gravity.CENTER);
    custom.setBackgroundDrawable(getResources().getDrawable(R.drawable.background_grad_grey_rounded));

    ImageView image =new ImageView(getApplicationContext());
    image.setBackgroundResource(R.drawable.ic_launcher); 
    custom.addView(image);

    ab = getSupportActionBar();


    ab.setDisplayShowCustomEnabled(true);
    ab.setCustomView(custom);
    ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    tab_connect = ab.newTab();
    tab_connect.setText("CONNECT");
    tab_connect.setTabListener(this);

    tab_discover = ab.newTab();
    tab_discover.setText("DISCOVER");
    tab_discover.setTabListener(this);

    tab_simplify= ab.newTab();
    tab_simplify.setText("SIMPLIFY");
    tab_simplify.setTabListener(this);

    ab.addTab(tab_simplify);
    ab.addTab(tab_discover);
    ab.addTab(tab_connect);

    ab.setDisplayShowTitleEnabled(false);
    ab.setDisplayShowHomeEnabled(false);

}

ただし、ロゴを非表示にすると、アクションバーが次のようにタブの下に移動します。

スクリーンショット

しかし、 ab.setDisplayShowHomeEnabled(true) を設定すると、アクションバーが適切な場所に表示されます(ただし、ロゴは必要ありません):

ここに画像の説明を入力

私は何を間違っていますか?

4

7 に答える 7

32

簡単な回避策は次のとおりです。

onCreate メソッドで次を使用します。

View homeIcon = findViewById(android.R.id.home);
((View) homeIcon.getParent()).setVisibility(View.GONE);

これにより、ホームボタンが完全に折りたたまれます。

PS:私は標準のActionBarを使用していますが、これは同じように動作するはずです

または

Sherlock Actionbar でサポートしたい場合は、これを使用する必要があります

actionBar.setLogo(null); // forgot why this one but it helped

View homeIcon = findViewById(
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
        android.R.id.home : R.id.abs__home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
((View) homeIcon).setVisibility(View.GONE);

actionBar.setDisplayShowTitleEnabled(false);
于 2012-11-21T11:18:33.847 に答える
12

要素 android.R.id.home が pre-hc に存在しないため、選択した回答はネイティブ ActionBar でのみ機能することに注意してください。つまり、hc 以前のデバイスでは、NPE が発生します。

ActionBarSherlock を使用しているため、hc 以前のデバイスをサポートしたいと考えているため、プラットフォームのバージョンに基づいて正しい ID を使用する必要があります。ABS は、ActionBar の実装のために R.id.abs__home を介して android.R.id.home に相当するものを公開します。

したがって、提案された回避策を次のように微調整できます。

View homeIcon = findViewById(
                    Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
                    android.R.id.home : R.id.abs__home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
于 2012-11-28T02:02:39.407 に答える
6

これも大活躍!(バグレポートのコメントを読んでください;))

actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT));
于 2013-03-14T19:47:20.110 に答える
3

Following @furyfred answer, this code can be used when using the ActionBar from AppCompat library:

View homeIcon = findViewById(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
            android.R.id.home : android.support.v7.appcompat.R.id.home);

if (null != homeIcon && null != homeIcon.getParent())
{
    ((View) homeIcon.getParent()).setVisibility(View.GONE);
}
于 2014-03-25T11:13:27.340 に答える
2

上記のすべての投稿で、ホーム アイコンが折りたたまれていますが、空白のスペースが残っています。これを避けるには、ロゴのサイズをゼロに設定する必要があります。以下に私のコードスニペットを追加しました。同じ問題に苦しんでいる他の人に役立つかもしれません。ありがとう

       actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT));

      View homeIcon = findViewById(
                Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
                android.R.id.home : R.id.abs__home);
        ((View) homeIcon.getParent()).setLayoutParams(new LinearLayout.LayoutParams(0, 0));
        ((View) homeIcon).setVisibility(View.GONE);
于 2015-01-13T12:04:38.087 に答える
1

私はこれを使いました

ActionBar ab = getSupportActionBar();
ab.setDisplayShowHomeEnabled(true);
    ab.setDisplayHomeAsUpEnabled(false);
    ab.setHomeButtonEnabled(false);
    ab.setLogo(null);

    View homeIcon = findViewById(
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
            android.R.id.home : R.id.abs__home);
    ((View) homeIcon.getParent()).setVisibility(View.GONE);
    ((View) homeIcon).setVisibility(View.GONE);

    ab.setDisplayShowTitleEnabled(false);
于 2013-12-22T11:17:31.773 に答える
0

actionBar.setDisplayOptions() メソッドから DISPLAY_SHOW_HOME フラグを削除するだけです。

于 2014-03-16T11:03:33.807 に答える