Symbol in der Aktionsleiste / Symbolleiste mit AppCompat-v7 anzeigen 21

130

Ich habe diese ausprobiert - sehe das Symbol aber immer noch nicht wie zuvor:

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

Es scheint zu funktionieren, wenn ich eine benutzerdefinierte Symbolleiste verwende - aber das würde mich zwingen, alle Layouts zu berühren - gibt es einen besseren Weg, dies zu tun?

ligi
quelle
1
Sie können Ihre Aktivitätsklasse hinzufügen, in der Sie Aktionsleisten hinzugefügt haben.
Harsha Vardhan

Antworten:

256
getSupportActionBar().setDisplayShowHomeEnabled(true);

zusammen mit

getSupportActionBar().setIcon(R.drawable.ic_launcher);
Nadavfima
quelle
7
Beachten Sie, dass getSupportActionBar()dies nullvom Stil Ihrer Aktivität abhängen kann.
Jlhonora
2
Es wird immer noch kein Symbol angezeigt. Ich habe getSupportActionBar () verwendet. setDisplayHomeAsUpEnabled (true); getSupportActionBar (). setIcon (R.drawable.ic_app_icon); getSupportActionBar (). setTitle ("Label");
Meenaxi
8
Warum wird das Symbol in der Mitte der Titelleiste angezeigt? Ich möchte das Symbol links in der Titelleiste. Bitte helfen Sie .. Danke
Mohammad Rajob
1
@Meenaxi du solltest setDisplayShowHomeEnabled (true) verwenden; Dieser hat den Trick für mich
getan
1
Beachten Sie, dass das Setzen des Symbols nicht anklickbar ist. Wenn Sie nach einem anklickbaren Symbol suchen, müssen Sie .setHomeAsUpIndicatores in Ihrem verwenden und handhaben onOptionsItemSelected.
Joshua Pinter
32

In modernen Android-Benutzeroberflächen sollten sich Entwickler mehr auf ein visuell unterschiedliches Farbschema für Symbolleisten als auf ihr Anwendungssymbol stützen. Von der Verwendung des Anwendungssymbols plus Titel als Standardlayout wird auf API 21-Geräten und neueren Versionen abgeraten.

Wenn Sie nicht einverstanden sind, können Sie versuchen mit:

So erstellen Sie die Symbolleiste in 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" />

In Ihrer Tätigkeit:

@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);
}

Verwenden Sie die setLogo () -Methode, um das Symbol festzulegen . Codequelle.

LordRaydenMK
quelle
1
Ich möchte nur darauf hinweisen, dass derzeit in der Play Store- SettingsAktivität das App-Symbol in der Aktionsleiste angezeigt wird. Dies ist nach dem Material-Update noch vorhanden.
Austyn Mahoney
17

Das hat bei mir funktioniert:

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

ebenso gut wie:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.ic_logo); //also displays wide logo
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional
Michał K.
quelle
Es gibt zu viele unnötige Methoden und nicht im Zusammenhang mit Symbol
Benutzer924
15

am einfachsten zu tun; einfach hinzufügen:

app:navigationIcon="@drawable/ic_action_navigation_menu">

zum <android.support.v7.widget.ToolbarTag

Wo @drawable/ic_action_navigation_menuist der Name des Symbols?

Pila
quelle
1
Funktioniert perfekt! Dies ist der richtige und einfachste Weg, um das Navigationssymbol in der Symbolleiste hinzuzufügen. Wenn Sie nach den Klicks des Navigationssymbols suchen möchten, können Sie android.R.id.homein Ihrem nach ID suchen onOptionsItemSelected(...).
Sazid
12

Ein besserer Weg, um mehrere Optionen festzulegen:

setIcon/setLogoMethode funktioniert nur, wenn Sie DisplayOptions festgelegt haben Versuchen Sie dies -

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

Sie können auch Optionen für die Anzeige von LOGO festlegen (einfach Konstante hinzufügen ActionBar.DISPLAY_USE_LOGO). Weitere Informationen - displayOptions

Vintesh
quelle
6

Versuchen Sie es mit:

ActionBar ab = getSupportActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayUseLogoEnabled(true);
ab.setLogo(R.drawable.ic_launcher);
Chris Banes
quelle
5
versprechend klang - aber noch kein Icon :-(
ligi
5

Wenn Sie das Home- oder Back-Symbol (kein Logo oder statisches Symbol) festlegen möchten, können Sie es verwenden

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 getSupportActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.home) );
Smoothumut
quelle
Dies ist die richtige Antwort, da Aussehen und Verhalten
bereitstellen
nur das gab mir ein normales Aussehen (Größe, Ränder, Versatz zwischen Titel und Symbol), funktioniert auch mit Vektor-Launcher ( .xml), wie R.mipmap.ic_launcheroderR.mipmap.ic_launcher_round
user924
und ich habe dies als Logo / statisches Symbol verwendet, weil andere Lösungen hässlich funktionieren
user924
5

Für die Aktionsleiste:

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

Für die Symbolleiste:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
Peter Ivanov
quelle
5
Es gibt keinen Unterschied zwischen dem 2-Code für ActionBar und der Symbolleiste. Ist dies beabsichtigt?
König König
1
Für ActionBar sollte lauten: getActionBar (). SetDisplayHomeAsUpEnabled (true); getActionBar (). setHomeAsUpIndicator (R.drawable.ic_action_back);
Darsshan
Dies ist eigentlich der richtige Weg. Nur die Verwendung setIconerlaubt keine anklickbare Schaltfläche, wobei as setHomeAsUpIndicatorund die Handhabung onOptionsItemSelectedein Vergnügen sind. Vielen Dank!
Joshua Pinter
4
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

ODER lassen Sie ein XML-Layout aufrufentool_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>

Fügen Sie nun in Ihrer Hauptaktivität diese Zeile hinzu

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

Wenn Sie Ihre Symbolleiste nicht mit setSupportActionBar als Aktionsleiste festlegen möchten , können Sie ein Logo neben Ihrem Navigationssymbol hinzufügen (wenn Sie beispielsweise eine Schaltfläche "Zurück" haben).

toolbar.setLogo();

oder in xml

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

Und selbst wenn Sie einen Titel in der Symbolleiste festgelegt haben, wird der Titel weiterhin angezeigt.

Beispiel: Der grüne Haken im Bild unten ist das Logo

Symbolleiste mit Navigationssymbol, Logo und Titel

Malek Hijazi
quelle
2

Versuche dies:

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);

für statisches Symbol

Odilon Cenamo
quelle
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);
}
Hardik Vasani
quelle
0

In Xamarin.Android können Sie diese verwenden:

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

Die Verwendung von Android.Support.V7.App.AppCompatActivity ist erforderlich.

Daniele D.
quelle
0

Versuche dies. Bei mir hat es geklappt

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayUseLogoEnabled(true);
Matteo
quelle
0

In Kotlin habe ich Folgendes getan, um nur das Symbol anzuzeigen:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
Leon
quelle