Mostrar icono en la barra de acción / barra de herramientas con AppCompat-v7 21

130

Intenté esto, pero aún no veo el ícono como antes:

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

Parece que funciona cuando uso la barra de herramientas personalizada, pero eso me obligaría a tocar todos los diseños, ¿hay una mejor manera de hacerlo?

ligi
fuente
1
¿Puede agregar su clase de actividad, donde ha agregado cosas de la barra de acción?
Harsha Vardhan

Respuestas:

256
getSupportActionBar().setDisplayShowHomeEnabled(true);

junto con

getSupportActionBar().setIcon(R.drawable.ic_launcher);
nadavfima
fuente
77
Tenga en cuenta que getSupportActionBar()podría nulldepender del estilo de su actividad.
jlhonora
2
todavía no se muestra el ícono. utilicé getSupportActionBar (). setDisplayHomeAsUpEnabled (true); getSupportActionBar (). setIcon (R.drawable.ic_app_icon); getSupportActionBar (). setTitle ("Label");
Meenaxi
8
¿Por qué aparece el ícono en medio de la barra de título? Quiero el icono a la izquierda de la barra de título. Por favor ayuda ... Gracias
Mohammad Rajob
1
@Meenaxi debes usar setDisplayShowHomeEnabled (verdadero); Ese fue el truco para mí
arniotaki
1
Tenga en cuenta que al configurar el icono no se puede hacer clic en él. Si está buscando un icono en el que se pueda hacer clic, debe usarlo .setHomeAsUpIndicatory manejarlo en su onOptionsItemSelected.
Joshua Pinter el
32

En las UI modernas de Android, los desarrolladores deberían apoyarse más en un esquema de color visualmente distinto para las barras de herramientas que en el icono de su aplicación. Se desaconseja el uso del ícono de la aplicación más el título como diseño estándar en los dispositivos API 21 y posteriores.

Si no está de acuerdo, puede probar con:

Para crear la barra de herramientas 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" />

En tu actividad:

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

Use el método setLogo () para configurar el icono. Código fuente.

LordRaydenMK
fuente
1
Solo quiero señalar que actualmente la actividad Play Store Settingstiene el ícono de la aplicación en la barra de acción. Esto todavía está allí después de la actualización de Material.
Austyn Mahoney
17

Esto funcionó para mí:

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

tanto como:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.ic_logo); //also displays wide logo
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional
Michał K
fuente
existen muchos métodos innecesarios y no están relacionados con el ícono
usuario924
15

cosa más simple de hacer; solo agrega:

app:navigationIcon="@drawable/ic_action_navigation_menu">

a la <android.support.v7.widget.Toolbaretiqueta

donde @drawable/ic_action_navigation_menuesta el nombre del icono

Pila
fuente
1
¡Funciona perfectamente! Esta es la forma correcta y más simple de agregar el icono de navegación en la barra de herramientas. Si desea verificar los clics en el icono de navegación, puede verificar la android.R.id.homeID en su onOptionsItemSelected(...).
Sazid
12

Una mejor manera de configurar múltiples opciones:

setIcon/setLogoEl método solo funcionará si ha configurado DisplayOptions. Intente esto:

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

También puede establecer opciones para mostrar el LOGO (solo agregue constante ActionBar.DISPLAY_USE_LOGO). Más información - displayOptions

Vintesh
fuente
6

Intenta usar:

ActionBar ab = getSupportActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayUseLogoEnabled(true);
ab.setLogo(R.drawable.ic_launcher);
Chris Banes
fuente
55
sonaba prometedor, pero aún no aparece el ícono :-(
ligi
5

si desea configurar el icono de inicio o de regreso (no el logotipo o el icono estático) para que pueda usar

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 getSupportActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.home) );
smoothumut
fuente
esta es la respuesta correcta, ya que despliega apariencia y comportamiento
cutiko
solo esto me dio una apariencia normal (tamaño, márgenes, desplazamiento entre título e icono), funciona bien incluso con el .xmlR.mipmap.ic_launcherR.mipmap.ic_launcher_round
iniciador de
y usé esto como logotipo / ícono estático porque otras soluciones funcionan feo
user924
5

Para la barra de acciones:

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

Para barra de herramientas:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
Peter Ivanov
fuente
55
No hay diferencia entre el código 2 para ActionBar y Toolbar, ¿es esto intencional?
Rey Rey
1
Para ActionBar debería ser: getActionBar (). SetDisplayHomeAsUpEnabled (true); getActionBar (). setHomeAsUpIndicator (R.drawable.ic_action_back);
Darsshan
Este es realmente el camino a seguir. El solo uso setIconno permite un botón en el que se pueda hacer clic, mientras setHomeAsUpIndicatorque el manejo de eso onOptionsItemSelectedfunciona de maravilla. ¡Gracias!
Joshua Pinter el
4
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

O haga un diseño XML llame altool_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>

Ahora en tu actividad principal agrega esta línea

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

Si no desea establecer su barra de herramientas como barra de acción utilizando setSupportActionBar , puede agregar un logotipo junto al icono de navegación (si tiene un botón de retroceso, por ejemplo) como este:

toolbar.setLogo();

o en xml

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

E incluso si tiene un título establecido en la barra de herramientas, el título aún se mostrará.

Ej: El cheque verde en la imagen de abajo es el logo

Barra de herramientas con ícono de navegación, logotipo y título

Malek Hijazi
fuente
2

Prueba esto:

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

para icono estático

Odilon Cenamo
fuente
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
fuente
0

En Xamarin.Android puedes usar estos:

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

Se requiere el uso de Android.Support.V7.App.AppCompatActivity.

Daniele D.
fuente
0

Prueba esto. Para mi funciono

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayUseLogoEnabled(true);
Matteo
fuente
0

En Kotlin hice lo siguiente para mostrar el ícono:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
León
fuente