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.