AppCompat-v7でアクションバー/ツールバーにアイコンを表示21


130

私はこれらを試しました-それでも以前のようにアイコンが表示されません:

getSupportActionBar().setLogo(R.drawable.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

カスタムツールバーを使用すると機能するように見えますが、すべてのレイアウトに触れる必要があります-そうするためのより良い方法はありますか?


1
あなたはあなたの活動クラスを追加することができます、あなたはアクションバーのものを追加しましたか?
Harsha Vardhan 2014年

回答:


256
getSupportActionBar().setDisplayShowHomeEnabled(true);

に加えて

getSupportActionBar().setIcon(R.drawable.ic_launcher);

7
あなたの活動のスタイルに依存するgetSupportActionBar()可能性があることに注意しnullてください。
jlhonora

2
まだアイコンが表示されていません。私はgetSupportActionBar()。setDisplayHomeAsUpEnabled(true);を使用しました。getSupportActionBar()。setIcon(R.drawable.ic_app_icon); getSupportActionBar()。setTitle( "Label");
Meenaxi 2016年

8
タイトルバーの中央にアイコンが表示されるのはなぜですか?タイトルバーの左側にアイコンが欲しい。助けてください..ありがとう
Mohammad Rajob

1
@Meenaxiでは、setDisplayShowHomeEnabled(true);を使用する必要があります。それは私のためのトリックをしました
arniotaki

1
アイコンを設定しても、アイコンがクリック可能になるわけではないことに注意してください。クリック可能なアイコンを探している場合は、それをで使用.setHomeAsUpIndicatorして処理する必要がありますonOptionsItemSelected
ジョシュアピンター

32

最近のAndroid UIでは、開発者はアプリケーションのアイコンよりも、ツールバーの視覚的に明確な配色に頼る必要があります。アプリケーションアイコンとタイトルを標準レイアウトとして使用することは、API 21以降のデバイスでは推奨されていません。

同意しない場合は、次のことを試してみてください。

XMLでツールバーを作成するには:

<android.support.v7.widget.Toolbar  
    android:id="@+id/my_awesome_toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

あなたの活動では:

@Override
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);
}

アイコンを設定するには、setLogo()メソッドを使用します。 コードソース。


1
現在、PlayストアSettingsアクティビティのアクションバーにアプリアイコンがあることを指摘しておきます。これは、マテリアルの更新後もまだ残っています。
オースティンマホーニー2014

17

これは私のために働きました:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayUseLogoEnabled(true);
    getSupportActionBar().setLogo(R.drawable.ic_logo);
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional

と同様:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.ic_logo); //also displays wide logo
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional

アイコンに関連しない多くの不要なメソッドがあります
user924

15

最も簡単なこと。追加するだけです:

app:navigationIcon="@drawable/ic_action_navigation_menu">

<android.support.v7.widget.Toolbarタグ

@drawable/ic_action_navigation_menuアイコンの名前はどこですか


1
完璧に動作します!これは、ツールバーにナビゲーションアイコンを追加するための正しい最も簡単な方法です。ナビゲーションアイコンのクリックを確認する場合は、でandroid.R.id.homeIDを確認できますonOptionsItemSelected(...)
Sazid

12

複数のオプションを設定するためのより良い方法:

setIcon/setLogoメソッドはDisplayOptionsを設定した場合にのみ機能しますこれを試してください-

actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);
actionBar.setIcon(R.drawable.ic_launcher);

ロゴを表示するためのオプションを設定することもできます(定数を追加するだけActionBar.DISPLAY_USE_LOGOです)。詳細情報-displayOptions


6

使ってみてください:

ActionBar ab = getSupportActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayUseLogoEnabled(true);
ab.setLogo(R.drawable.ic_launcher);

5
有望に聞こえますが、アイコンはまだありません:-(
ligi '18

5

(ロゴや静的アイコンではなく)ホームアイコンまたは戻るアイコンを設定して、

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 getSupportActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.home) );

これは、デプロイの外観と動作するので、正しい答えである
cutiko

これだけで通常の外観(サイズ、マージン、タイトルとアイコンの間のオフセット)が得られ、ベクターランチャー(.xml)でも問題なく機能します。R.mipmap.ic_launcherまたはR.mipmap.ic_launcher_round
user924

これをロゴ/静的アイコンとして使用すると、他のソリューションが見苦しくなります
user924

5

Actionbarの場合:

getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);

ツールバーの場合:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);

5
ActionBarとToolbarの2つのコードに違いはありませんが、これは意図的なものですか?
キングキング

1
ActionBarの場合:getActionBar()。setDisplayHomeAsUpEnabled(true); getActionBar()。setHomeAsUpIndicator(R.drawable.ic_action_back);
Darsshan 2017

これが実際の方法です。ただ、使用setIcon場所など、クリック可能なボタンを許可していませんsetHomeAsUpIndicatorし、その中に取り扱いonOptionsItemSelected作品御馳走を。ありがとう!
Joshua Pinter

4
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

または、XMLレイアウトを呼び出すtool_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    android:elevation="4dp">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:src="@drawable/ic_action_search"/>

    </RelativeLayout>
</android.support.v7.widget.Toolbar>

今あなたの主な活動にこの行を追加してください

 <include
     android:id="@+id/tool_bar"
     layout="@layout/tool_bar" />

3

setSupportActionBarを使用してツールバーをアクションバーとして設定したくない場合は、次のようにナビゲーションアイコン(たとえば、戻るボタンがある場合)の横にロゴを追加できます。

toolbar.setLogo();

またはxmlで

<android.support.v7.widget.Toolbar 
    ....
    android:logo="@drawable/logo"
    app:logo="@drawable/logo"/>

ツールバーにタイトルが設定されていても、タイトルは表示されます。

例:下の画像の緑色のチェックはロゴです

ナビゲーションアイコン、ロゴ、タイトルのあるツールバー


2

これを試して:

import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
...
    ActionBar actionbar = getSupportActionBar();
    actionbar.setDisplayHomeAsUpEnabled(true);
    actionbar.setHomeAsUpIndicator(R.drawable.ic_launcher);

so your icon will be used for Home / back
or

import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
...
    ActionBar actionbar = getSupportActionBar();
    actionbar.setDisplayShowHomeEnabled(true);
    actionbar.setIcon(R.drawable.ic_launcher);

静的アイコン用


1
toolbar.setLogo(resize(logo, (int) Float.parseFloat(mContext.getResources().getDimension(R.dimen._120sdp) + ""), (int) Float.parseFloat(mContext.getResources().getDimension(R.dimen._35sdp) + "")));


public Drawable resize(Drawable image, int width, int height)
{
    Bitmap b = ((BitmapDrawable) image).getBitmap();
    Bitmap bitmapResized = Bitmap.createScaledBitmap(b, width, height, false);
    return new BitmapDrawable(getResources(), bitmapResized);
}

0

Xamarin.Androidでは、これらを使用できます。

SupportActionBar.SetHomeButtonEnabled(true);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.SetIcon(Resource.Drawable.ic_launcher);
SupportActionBar.SetDisplayShowTitleEnabled(false);

Android.Support.V7.App.AppCompatActivityを使用する必要があります。


0

これを試して。私にとってはうまくいった

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayUseLogoEnabled(true);

0

Kotlinでは、アイコンを表示するために次のことを行いました。

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.