Relleno de la imagen del indicador "arriba" de la barra de acciones

Estoy buscando una forma de diseñar el ícono "arriba" de la barra de acción que se muestra cuando lo configuró para que se muestre desde su actividad:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Estuve buscando y encontré una manera de agregar relleno entre el ícono de inicio y el título (Relleno entre el título y el icono de inicio de ActionBar), pero no es una forma de agregar relleno entre el ícono de inicio y el ícono del indicador hacia arriba.

cavé en ActionBarView.HomeView en la fuente de Android y parece inflar el indicador hacia arriba a través de esta llamada:

mUpView = findViewById(com.android.internal.R.id.up);

El problema es el com.android.internal.R.id.up es interno, por lo que no puedo acceder a él, por lo que la solución vinculada anteriormente para rellenar el ícono de inicio no funcionará. Idealmente, me gustaría anular el ActionBarView.HomeView, pero es privado dentro del ActionBarView.

¿Alguien sabe si ActionBarSherlock proporciona una buena manera de anular este comportamiento? Busqué proporcionar un diseño de inicio personalizado, pero los hilos que encontré indicaron que no sería una buena idea desviarse de las clases estándar de Android.

¿Alguna idea?

preguntado el 22 de mayo de 12 a las 18:05

8 Respuestas

Esta solución funcionará

ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(10, 0, 0, 0);

PERO, se verá obligado a poner este código en una actividad principal, o en cada actividad en la que desee agregar el relleno al botón de inicio.

Sugiero este enfoque:

  1. Cree una lista de capas dibujable con el siguiente código:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item>
            <bitmap
                android:antialias="true"
                android:gravity="center"
                android:src="@drawable/btn_back_actionbar_normal" />
        </item>
        <item>
            <shape android:shape="rectangle" >
                <size android:width="24dp" />
                <solid android:color="@android:color/transparent" />
            </shape>
        </item>
    </layer-list>
    
  2. En tus estilos agrega:

Para valores-11:

<item name="android:homeAsUpIndicator">@drawable/actionbar_back_selector</item>

Para valores:

<item name="homeAsUpIndicator">@drawable/actionbar_back_selector</item>

De esta manera, agregará un relleno entre el botón Atrás y el botón Inicio en la barra de acción de compatibilidad, y tendrá que agregar este código solo una vez, ¡y estará disponible en toda la aplicación!

Respondido el 26 de junio de 17 a las 20:06

findViewById(android.R.id.home) devuelve nulo para mí - Ігар Цімошка

A partir de la API 15, el posicionamiento de estos elementos está codificado en los recursos de diseño. La única alternativa que tiene sería usar un diseño de navegación personalizado para crear el suyo propio y ocultar la navegación de inicio integrada.

Respondido el 10 de junio de 12 a las 21:06

Esa es la conclusión a la que también llegué. Supongo que Google está tratando de hacer cumplir ciertos estándares de diseño. Al final, volví a bajar a la luz holográfica predeterminada como indicador de inicio y se ve bastante decente en comparación con el indicador personalizado que había configurado. - dgknipp

Esto ahora ha cambiado con la introducción de la barra de herramientas en API 21: Vinay W

Actualmente esta respuesta es correcto. Simplemente configure el relleno izquierdo del botón de inicio y agregará relleno entre el botón de inicio y la flecha hacia arriba

    ImageView view = (ImageView)findViewById(android.R.id.home);
    view.setPadding(10, 0, 0, 0);

contestado el 23 de mayo de 17 a las 12:05

Creo que también funciona con ActionBarSherlock para versiones inferiores: starkej2

@ blacksh33p No, no es así, pero esto se puede arreglar fácilmente. - Nombre que se ve en la pagina

Devuelve nulo - desarrollador de Android

Tal vez funcione si agrega el relleno al gráfico (en Photoshop, por ejemplo) y establece este gráfico en el tema con el atributo

<item name="android:homeAsUpIndicator">@drawable/up_with_padding</item>

Respondido el 10 de junio de 12 a las 21:06

Creo que lo intenté, tendría que verificar nuevamente, pero estoy bastante seguro de que Google está eliminando cualquier relleno que pueda agregar para mantener la interfaz de usuario consistente. - dgknipp

En mi celular, ES trabajo. La solución está a continuación:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
    <bitmap
        android:src="@drawable/frame_menu"
        android:antialias="true"
        android:gravity="center" 
        />
</item>
<item >
    <shape android:shape="rectangle">
        <size android:width="24dp"/>
        <solid android:color="@android:color/transparent"></solid>
        <padding
            android:right="10dp" 
            />
    </shape>

</item>

La frase más importante es "android:right=10dp"

respondido 12 mar '15, 04:03

Simplemente agregaría a la respuesta de @ blacksh33p cómo obtener el logotipo ImageView mientras se usa ActionBarSherlock para admitir teléfonos más antiguos.

ImageView view = (ImageView)findViewById(android.R.id.home);
if (view == null)
    view = (ImageView)findViewById(R.id.abs__home); // not sure that the name is exactly this - I tested it while developing an app on monodroid

Respondido el 14 de enero de 14 a las 10:01

Simplemente agregue la llamada de diseño dibujable "actionbar_back_selector" y coloque este código

Y en el archivo Java (el diseño que necesita para el botón de inicio del archivo java correspondiente) Ponga este código ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(verdadero); actionBar.setHomeButtonEnabled(verdadero); actionBar.setHomeAsUpIndicator(R.drawable.actionbar_back_selector);

Respondido 28 ago 15, 05:08

<layer-list xmlns:android="esquemas.android.com/apk/res/android">Este es el código del diseño actionbar_back_selector - Samy Gopal

puede definir un estilo para "HomeAsUpIndicator" en su tema de esta manera:

<item name="toolbarNavigationButtonStyle">@style/MyToolbarNavigationButtonStyle</item>

en el que la toobarNavigationButtonStyle se usa para definir todos los estilos para ese indicador, puede cambiar su ancho y paddingEnd para ampliar la brecha entre este y el texto del título.

Respondido el 11 de diciembre de 15 a las 02:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.