web-dev-qa-db-fra.com

Icône personnalisée dans la barre d'outils Android

J'essaie d'utiliser définir une icône personnalisée dans la barre d'outils du support, mais la seule icône affichée est une flèche vers la gauche ... J'ai essayé de la définir dans la présentation et par programme, mais le résultat est identique.

Voici mon activité 

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar);
    toolbar.setNavigationIcon(R.drawable.ic_launcher);
    toolbar.setTitle("");
    setSupportActionBar(toolbar);
}

Et ma mise en page de la barre d'outils

<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/my_toolbar"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    app:navigationIcon="@drawable/ic_action_bar"
    Android:minHeight="@dimen/action_bar_size"
    Android:background="?attr/colorPrimary"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    />
13
Antoine

J'ai juste essayé moi-même et le problème semble être que vous devez appeler setNavigationIcon après setSupportActionBar(toolbar). Sinon, il ne montrera que la flèche comme vous l'avez décrit.
Donc, pour résoudre ce problème, il suffit de changer le code comme suit:

//...
Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_launcher);
toolbar.setTitle("");

Remarque: Même chose pour définir le titre, contentDescription, etc. Je ne sais pas s'il s'agit d'un bogue ou s'il est prévu, mais c'est vraiment étrange.

21
reVerse

Le moyen le plus efficace pour y parvenir:

pour afficher correctement l’icône de gauche, appelez cette fonction dans onCreateView ou onCreate:

protected void enableDisplayHomeAsHome(boolean active) {
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(active); // switch on the left hand icon
        actionBar.setHomeAsUpIndicator(R.drawable.ic_action_home); // replace with your custom icon
    }
}

Vous pouvez maintenant intercepter ce bouton dans votre activité:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home: {  //index returned when home button pressed
            homeButtonPressed();
            return true;
        }
    }
    return super.onOptionsItemSelected(item);
}
0
James Semaj

Si vous souhaitez changer l’icône du menu . (peut-être que quelqu'un en aura besoin)

  1. Dans votre activité 

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_info, menu);
        return true;
    }
    
  2. dans votre dossier de menu en res. (menu_info.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
      xmlns:app="http://schemas.Android.com/apk/res-auto">
        <item
            Android:id="@+id/menu_info_action"
            Android:icon="@drawable/ic_info_icon"
            Android:title="@string/information"
            app:showAsAction="ifRoom"/>
    </menu>
    
0
Jack the Ripper