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?


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

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.


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

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


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


6

Essayez d'utiliser:

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

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

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

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

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


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


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

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.


0

Essaye ça. Pour moi ça a marché

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

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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.