afficher l'icône dans la barre d'actions / la barre d'outils avec AppCompat-v7 21

130

J'ai essayé ceux-ci - mais je ne vois toujours pas l'icône comme avant:

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

Cela semble fonctionner lorsque j'utilise la barre d'outils personnalisée - mais cela me forcerait à toucher toutes les mises en page - y a-t-il une meilleure façon de le faire?

ligi
la source
1
Vous pouvez ajouter votre classe d'activité, où vous avez ajouté des éléments de barre d'action?
Harsha Vardhan

Réponses:

256
getSupportActionBar().setDisplayShowHomeEnabled(true);

de même que

getSupportActionBar().setIcon(R.drawable.ic_launcher);
Nadavfima
la source
7
Attention, cela getSupportActionBar()peut nulldépendre du style de votre activité.
jlhonora
2
toujours son icône ne montre pas. j'ai utilisé getSupportActionBar (). setDisplayHomeAsUpEnabled (true); getSupportActionBar (). setIcon (R.drawable.ic_app_icon); getSupportActionBar (). setTitle ("Libellé");
Meenaxi
8
Pourquoi l'icône s'affiche au milieu de la barre de titre? Je veux l'icône à gauche de la barre de titre. S'il vous plaît aider .. Merci
Mohammad Rajob
1
@Meenaxi vous devriez utiliser setDisplayShowHomeEnabled (true); Celui-là a fait l'affaire pour moi
arniotaki
1
Notez que la définition de l'icône ne la rend pas cliquable. Si vous recherchez une icône cliquable, vous devez l'utiliser .setHomeAsUpIndicatoret la gérer dans votre onOptionsItemSelected.
Joshua Pinter
32

Dans les interfaces utilisateur Android modernes, les développeurs devraient s'appuyer davantage sur un jeu de couleurs visuellement distinct pour les barres d'outils que sur l'icône de leur application. L'utilisation de l'icône d'application et du titre comme mise en page standard est déconseillée sur les appareils API 21 et plus récents.

Si vous n'êtes pas d'accord, vous pouvez essayer avec:

Pour créer la barre d'outils en 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" />

Dans votre activité:

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

Utilisez la méthode setLogo () pour définir l'icône. Source du code.

LordRaydenMK
la source
1
Je veux juste souligner qu'actuellement, l'activité Play Store Settingsa l'icône d'application dans la barre d'action. Ceci est toujours là après la mise à jour du matériel.
Austyn Mahoney
17

Cela a fonctionné pour moi:

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

aussi bien que:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.ic_logo); //also displays wide logo
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional
Michał K
la source
il existe de nombreuses méthodes inutiles et non liées à l'icône
user924
15

chose la plus simple à faire; il suffit d'ajouter:

app:navigationIcon="@drawable/ic_action_navigation_menu">

au <android.support.v7.widget.Toolbartag

@drawable/ic_action_navigation_menuest le nom de l'icône

Pila
la source
1
Fonctionne parfaitement! C'est la manière correcte et la plus simple d'ajouter l'icône de navigation dans la barre d'outils. Si vous souhaitez vérifier les clics sur l'icône de navigation, vous pouvez vérifier l' android.R.id.homeID dans votre onOptionsItemSelected(...).
Sazid
12

Une meilleure façon de définir plusieurs options:

setIcon/setLogone fonctionnera que si vous avez défini DisplayOptions Essayez ceci -

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

Vous pouvez également définir des options pour afficher LOGO (ajoutez simplement une constante ActionBar.DISPLAY_USE_LOGO). Plus d'informations - DisplayOptions

Vintesh
la source
6

Essayez d'utiliser:

ActionBar ab = getSupportActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayUseLogoEnabled(true);
ab.setLogo(R.drawable.ic_launcher);
Chris Banes
la source
5
semblait prometteur - mais toujours pas d'icône :-(
ligi
6

Pour Actionbar:

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

Pour la barre d'outils:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
Peter Ivanov
la source
5
Il n'y a aucune différence entre le code 2 pour ActionBar et Toolbar, est-ce intentionnel?
King King
1
Pour ActionBar doit être: getActionBar (). SetDisplayHomeAsUpEnabled (true); getActionBar (). setHomeAsUpIndicator (R.drawable.ic_action_back);
Darsshan
C'est en fait la voie à suivre. Le simple fait d'utiliser setIconne permet pas un bouton cliquable, alors que sa setHomeAsUpIndicatormanipulation onOptionsItemSelectedfonctionne comme un régal. Merci!
Joshua Pinter
5

si vous souhaitez définir l'icône d'accueil ou de retour (et non le logo ou l'icône statique) afin de pouvoir utiliser

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 getSupportActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.home) );
smoothumut
la source
c'est la bonne réponse, depuis déployer l'apparence et le comportement
cutiko
seulement cela m'a donné une apparence normale (taille, marges, décalage entre le titre et l'icône), fonctionne bien même avec le lanceur de vecteurs ( .xml), comme R.mipmap.ic_launcherouR.mipmap.ic_launcher_round
user924
et je l'ai utilisé comme logo / icône statique car les autres solutions fonctionnent
mal
4
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

OU créez une mise en page XML, appelez letool_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>

Maintenant, dans votre activité principale, ajoutez cette ligne

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

Si vous ne souhaitez pas définir votre barre d'outils comme barre d'action à l'aide de setSupportActionBar , vous pouvez ajouter un logo à côté de votre icône de navigation (si vous avez un bouton de retour par exemple) comme ceci:

toolbar.setLogo();

ou en xml

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

Et même si vous avez défini un titre sur la barre d'outils, le titre s'affichera toujours.

Ex: la coche verte dans l'image ci-dessous est le logo

Barre d'outils avec icône de navigation, logo et titre

Malek Hijazi
la source
2

Essaye ça:

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

pour l'icône statique

Odilon Cenamo
la source
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
la source
0

Dans Xamarin.Android, vous pouvez utiliser ceux-ci:

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

l'utilisation d'Android.Support.V7.App.AppCompatActivity est requise.

Daniele D.
la source
0

Essaye ça. Pour moi ça a marché

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayUseLogoEnabled(true);
Matteo
la source
0

Dans Kotlin, j'ai fait ce qui suit pour afficher simplement l'icône:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
Léon
la source