mostra icona nella barra delle azioni / barra degli strumenti con AppCompat-v7 21


130

Ho provato questi - ma ancora non vedo l'icona come prima:

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

Sembra funzionare quando utilizzo la barra degli strumenti personalizzata, ma ciò mi costringerebbe a toccare tutti i layout: esiste un modo migliore per farlo?


1
Puoi aggiungere la tua classe di attività, dove hai aggiunto elementi della barra delle azioni?
Harsha Vardhan,

Risposte:


256
getSupportActionBar().setDisplayShowHomeEnabled(true);

insieme a

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

7
Attenzione che getSupportActionBar()potrebbe nulldipendere dallo stile della tua attività.
jlhonora,

2
continua a non mostrare l'icona. ho usato getSupportActionBar (). setDisplayHomeAsUpEnabled (true); . getSupportActionBar () setIcon (R.drawable.ic_app_icon); . getSupportActionBar () setTitle ( "Label");
Meenaxi,

8
Perché l'icona viene visualizzata al centro della barra del titolo? Voglio Icon lato sinistro della barra del titolo. Per favore aiutami .. Grazie
Mohammad Rajob,

1
@Meenaxi dovresti usare setDisplayShowHomeEnabled (true); Quello ha fatto il trucco per me
arniotaki il

1
Si noti che l'impostazione dell'icona non la rende selezionabile. Se stai cercando un'icona cliccabile, devi usarla .setHomeAsUpIndicatore gestirla nel tuo onOptionsItemSelected.
Joshua Pinter,

32

Nelle moderne interfacce utente Android gli sviluppatori dovrebbero appoggiarsi più a una combinazione di colori visivamente distinta per le barre degli strumenti che alla loro icona dell'applicazione. L'uso dell'icona dell'applicazione più il titolo come layout standard è sconsigliato sui dispositivi API 21 e successivi.

Se non sei d'accordo puoi provare con:

Per creare la barra degli strumenti 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" />

Nella tua attività:

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

Utilizzare il metodo setLogo () per impostare l'icona. Codice sorgente.


1
Voglio solo sottolineare che al momento l' Settingsattività Play Store ha l'icona dell'app nella barra delle azioni. Questo è ancora lì dopo l'aggiornamento del materiale.
Austyn Mahoney,

17

Questo ha funzionato per me:

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

così come:

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

ci sono molti metodi non necessari e non correlati all'icona
user924

15

cosa più semplice da fare; basta aggiungere:

app:navigationIcon="@drawable/ic_action_navigation_menu">

al <android.support.v7.widget.Toolbartag

dov'è @drawable/ic_action_navigation_menuil nome dell'icona


1
Funziona perfettamente! Questo è il modo corretto e più semplice per aggiungere l'icona di navigazione nella barra degli strumenti. Se si desidera verificare la presenza di clic sull'icona di navigazione, è possibile verificare l' android.R.id.homeID nel proprio onOptionsItemSelected(...).
Sazid,

12

Un modo migliore per impostare più opzioni:

setIcon/setLogoil metodo funzionerà solo se hai impostato DisplayOptions Prova questo -

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

È inoltre possibile impostare le opzioni per la visualizzazione di LOGO (basta aggiungere una costante ActionBar.DISPLAY_USE_LOGO). Ulteriori informazioni - displayOptions


6

Prova a usare:

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

5
sembrava promettente - ma ancora nessuna icona :-(
ligi

6

Per la barra delle azioni:

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

Per la barra degli strumenti:

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

5
Non c'è alcuna differenza tra il codice 2 per ActionBar e Toolbar, è intenzionale?
King King,

1
Per ActionBar dovrebbe essere: getActionBar (). SetDisplayHomeAsUpEnabled (true); . getActionBar () setHomeAsUpIndicator (R.drawable.ic_action_back);
Darsshan,

Questa è in realtà la strada da percorrere. Il solo utilizzo setIconnon consente un pulsante cliccabile, dove come setHomeAsUpIndicatore gestirlo in onOptionsItemSelectedfunziona a meraviglia. Grazie!
Joshua Pinter,

5

se si desidera impostare l'icona home o back (non il logo o l'icona statica) in modo da poter utilizzare

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

questa è la risposta corretta, dal momento che schierare aspetto e comportamento
cutiko

solo questo mi ha dato un aspetto normale (dimensioni, margini, offset tra titolo e icona), funziona bene anche con il vettore launcher ( .xml), come R.mipmap.ic_launcheroR.mipmap.ic_launcher_round
user924

e l'ho usato come logo / icona statica perché altre soluzioni funzionano male
user924

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

O effettuare un layout XML chiamare iltool_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>

Ora nella tua attività principale aggiungi questa riga

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

3

Se non si desidera impostare la barra degli strumenti come barra delle azioni utilizzando setSupportActionBar , è possibile aggiungere un logo accanto all'icona di navigazione (se si dispone ad esempio di un pulsante Indietro) in questo modo:

toolbar.setLogo();

o in xml

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

E anche se nella barra degli strumenti è impostato un titolo, il titolo verrà comunque visualizzato.

Esempio: il segno di spunta verde nell'immagine qui sotto è il logo

Barra degli strumenti con icona di navigazione, logo e titolo


2

Prova questo:

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

per icona statica


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 puoi usare questi:

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

è richiesto l'utilizzo di Android.Support.V7.App.AppCompatActivity.


0

Prova questo. Per me ha funzionato

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

0

In Kotlin ho fatto quanto segue per mostrare solo l'icona:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.