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?


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

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.


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

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?


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


6

Versuchen Sie es mit:

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

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

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

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" />

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


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


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

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.


0

Versuche dies. Bei mir hat es geklappt

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

0

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

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.