Android: elimina el margen izquierdo del diseño personalizado de la barra de acciones

Resuelto Zbarcea Christian asked hace 54 años • 22 respuestas

Estoy usando una vista de barra de acciones personalizada y, como puede ver en la captura de pantalla siguiente, hay un espacio gris en blanco en la barra de acciones. Quiero eliminarlo.

ingrese la descripción de la imagen aquí

Qué he hecho:

res/values-v11/styles.xml

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle">@style/ActionBarStyle</item>
        <item name="actionBarStyle">@style/ActionBarStyle</item>
</style>

res/values/my_custom_actionbar.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
        <item name="android:height">60dp</item>
    </style>
</resources>

Manifiesto

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="19" />

<application
            android:icon="@drawable/ic_launcher"
            android:label="@string/AppName"
            android:theme="@style/AppBaseTheme" >
    <!-- activities... etc -->
</application>

Actividad principal

public void onCreate(Bundle bundle) {
    super.onCreate(bundle);

    ActionBar actionbar = getSupportActionBar();

    actionbar.setDefaultDisplayHomeAsUpEnabled(false);
    actionbar.setDisplayHomeAsUpEnabled(false);
    actionbar.setDisplayShowCustomEnabled(true);
    actionbar.setDisplayShowHomeEnabled(false);
    actionbar.setDisplayShowTitleEnabled(false);
    actionbar.setDisplayUseLogoEnabled(false);
    actionbar.setHomeButtonEnabled(false);

    // Add the custom layout
    View view = LayoutInflater.from(this).inflate(R.layout.actionbar, null, false);
    actionbar.setCustomView(view);
}

Encontré una publicación reciente que señala que hay un problema con la última versión. También actualicé ADT y SDK a Android 5.

La vista personalizada de Android ActionBar no llena el padre

No sé qué debo hacer.

Editar (solución parcial):

No funciona en Android <= API 10.

Android Lollipop, la vista personalizada de AppCompat ActionBar no ocupa todo el ancho de la pantalla

¿Qué he cambiado?

Utilice la última versión del SDK:

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="21" />

Agrega un toolbarStyle:

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle">@style/ActionBarStyle</item>
        <item name="actionBarStyle">@style/ActionBarStyle</item>

        <item name="android:toolbarStyle">@style/ToolbarStyle</item>
        <item name="toolbarStyle">@style/ToolbarStyle</item>
</style>

<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
    <item name="contentInsetStart">0dp</item>
    <item name="android:contentInsetStart">0dp</item>
</style>
Zbarcea Christian avatar Jan 01 '70 08:01 Zbarcea Christian
Aceptado

Si está agregando Toolbarvía XML, simplemente puede agregar atributos XML para eliminar inserciones de contenido.

<android.support.v7.widget.Toolbar
    xmlns:app="schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/primaryColor"
    android:contentInsetLeft="0dp"
    android:contentInsetStart="0dp"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    android:contentInsetRight="0dp"
    android:contentInsetEnd="0dp"
    app:contentInsetRight="0dp"
    app:contentInsetEnd="0dp" />
LukeWaggoner avatar Aug 31 '2015 22:08 LukeWaggoner

prueba esto:

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowTitleEnabled(false);
    View customView = getLayoutInflater().inflate(R.layout.main_action_bar, null);
    actionBar.setCustomView(customView);
    Toolbar parent =(Toolbar) customView.getParent();
    parent.setPadding(0,0,0,0);//for tab otherwise give space in tab
    parent.setContentInsetsAbsolute(0,0);
cocotyty avatar Jan 16 '2015 07:01 cocotyty

El recuadro izquierdo se debe a la barra de herramientas contentInsetStart, que de forma predeterminada es 16 dp.

Cambie esto para alinearlo con la línea clave.

Actualización para la biblioteca de soporte v24.0.0:

Para coincidir con la especificación de Material Design, hay un atributo adicional contentInsetStartWithNavigationque por defecto es 16dp. Cambie esto si también tiene un ícono de navegación.

Resultó que esto es parte de una nueva Especificación de diseño de materiales introducida en la versión 24 de la biblioteca de diseño.

https://material.google.com/patterns/navigation.html

Sin embargo, es posible eliminar el espacio adicional agregando la siguiente propiedad al widget de la barra de herramientas.

app:contentInsetStartWithNavigation="0dp"

Antes : ingrese la descripción de la imagen aquí

Después : ingrese la descripción de la imagen aquí

Naveen Kumar M avatar Jun 20 '2017 07:06 Naveen Kumar M