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?


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

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.


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

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


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


6

Intenta usar:

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

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

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

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

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


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


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

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.


0

Prueba esto. Para mi funciono

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

0

En Kotlin hice lo siguiente para mostrar el ícono:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.