Android API 21 Toolbar Padding

193

¿Cómo me deshago del relleno adicional en la nueva barra de herramientas con Android SDK API versión 21 (la biblioteca de soporte)?

Estoy hablando de las flechas rojas en esta imagen: ingrese la descripción de la imagen aquí

Aquí está el código que estoy usando:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:background="?attr/colorPrimary"
        android:padding="0dp"
        android:layout_margin="0dp">

        <RelativeLayout
            android:id="@+id/action_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="0dp"
            android:padding="0dp"
            android:background="#000000">

            <Spinner
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        </RelativeLayout>
</Toolbar>

Como puede ver, he establecido todo el relleno relevante en 0, pero todavía hay relleno alrededor del Spinner. ¿Qué he hecho mal o qué debo hacer para deshacerme del relleno adicional?

Editar Algunos han cuestionado por qué estoy tratando de hacer esto.

Según las especificaciones de diseño de materiales, la ruleta debe estar a 72 dp del lado izquierdo desc

Necesito neutralizar el relleno que Google ha puesto allí para colocar correctamente mi ruleta: desc

Editar 2

Según la respuesta de Chris Bane a continuación, configuré contentInsetStart en 0. Para la biblioteca de soporte, deberá usar el espacio de nombres de la aplicación:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

     <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="@dimen/action_bar_height"
        android:background="?attr/colorPrimary"
        android:contentInsetStart="0dp"
        android:contentInsetLeft="0dp"
        app:contentInsetLeft="0dp"
        app:contentInsetStart="0dp"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

</android.support.v4.widget.DrawerLayout>

Espero que esto ayude a alguien, me confundió durante varios días.

James Cross
fuente
44
¿también has logrado eliminar los rellenos superiores / inferiores? Lo intenté pero no pasa nada, incluso configurando todas las contentInsetXpropiedades a 0dp.
patrickjason91
similar a @ patrickjason91 ¿es posible alinear ImageView con la parte superior de la barra de herramientas (la imagen tiene w, h: wrap_content) dentro de la barra de herramientas? Estaba intentando todo pero no pude lograrlo. Mi objetivo es tener algo como "colgar" la imagen de la cinta de marcadores desde la parte superior de la barra de herramientas, apuesto a que siempre hay algo de relleno que no puedo eliminar
Ewoks

Respuestas:

280

El recuadro izquierdo es causado por la barra de herramientas, contentInsetStartque por defecto es 16dp.

Cambie esto a 72dp para alinearlo con la línea clave.

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

Para que coincida con la especificación de Diseño de materiales, hay un atributo adicional contentInsetStartWithNavigationque, de forma predeterminada, es 16dp. Cambie esto si también tiene un icono de navegación.

Chris Banes
fuente
Muchas gracias por esto. Sin embargo, parece un poco extraño alejarse del relleno y el margen. ¿Es esto una cosa de Android 5?
James Cross
1
ContentInsetStart se utiliza para insertar desde cualquier interfaz de usuario proporcionada por la barra de herramientas (por ejemplo, el icono de navegación).
Chris Banes
¿Y cómo alinearías el botón de radio con el ícono en la barra de herramientas? Tengo problemas similares: stackoverflow.com/questions/26623042/…
Ferran Negre
También hay un atributo titleMarginStart para el relleno del título
desviado el
2
poner contentInsetStartWithNavigationa 0 me ayudó con support-v4: 25.0.1
Quentin G.
145

La respuesta anterior es correcta, pero todavía hay una cosa que podría crear problemas (al menos sí creó un problema para mí)

Usé lo siguiente y no funciona correctamente en dispositivos más antiguos:

android:contentInsetStart="0dp"
android:contentInsetLeft="0dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"

El truco está aquí, solo usa lo siguiente:

app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"

y deshacerse de

android:contentInsetStart="0dp"
android:contentInsetLeft="0dp"

Y ahora debería funcionar bien en todos los dispositivos.

Espero eso ayude.

Varundroid
fuente
Este podría ser el comportamiento predeterminado. Gracias =)
Luciano Rodríguez
2
No funciona para CollapsingToolBarLayout. Por favor, ayúdame .
Aslam Hossin
agregar android: padding = "0dp" me ayudó
AITAALI_ABDERRAHMANE
1
junto con el 4 se ha indicado anteriormente, app:contentInsetStartWithNavigationlas cosas podrían ayudar a solucionar si no está ya lo suficientemente
computingfreak
10

Simplemente agregue estas dos líneas en la barra de herramientas. Luego obtenemos el nuevo espacio del lado izquierdo eliminado, por defecto, 16dp.

android:contentInsetStart="0dp"
app:contentInsetStart="0dp"
Amit Walke
fuente
9

En caso de que alguien tropiece aquí ... también puede configurar el relleno , por ejemplo:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

int padding = 200 // padding left and right

toolbar.setPadding(padding, toolbar.getPaddingTop(), padding, toolbar.getPaddingBottom());

O contentInset :

toolbar.setContentInsetsAbsolute(toolbar.getContentInsetLeft(), 200);
trabajó
fuente
no necesita convertir el relleno en dp y tener en cuenta la densidad de visualización.
Alguien en algún lugar el
3

Esto es lo que hice y funciona perfectamente en todas las versiones de Android.

toolbar.xml

<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/toolbar"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:background="@color/primary_color"
    app:theme="@style/ThemeOverlay.AppCompat"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

    <TextView
        android:id="@+id/toolbar_title"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="16dp" <!-- Add margin -->
        android:layout_marginStart="16dp"
        android:gravity="left|center"
        android:text="Toolbar Title" <!-- Your title text -->
        android:textColor="@color/white" <!-- Matches default title styles -->
        android:textSize="20sp"
        android:fontFamily="sans-serif-medium"/>

</android.support.v7.widget.Toolbar>

MyActivity.java (para ocultar el título predeterminado de la barra de herramientas)

getSupportActionBar().setDisplayShowTitleEnabled(false); // Hide default toolbar title

Resultado con Keylines Mostrado

ingrese la descripción de la imagen aquí

Miguel
fuente
3

Haga su barra de herramientas como:

<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/menuToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:background="@color/white"
android:contentInsetLeft="10dp"
android:contentInsetRight="10dp"
android:contentInsetStart="10dp"
android:minHeight="?attr/actionBarSize"
android:padding="0dp"
app:contentInsetLeft="10dp"
app:contentInsetRight="10dp"
app:contentInsetStart="10dp"></android.support.v7.widget.Toolbar>

Necesitas agregar

contentInset

atributo para agregar espacio

sigue este enlace para obtener más información: consejos de Android

Aneh Thakur
fuente
3

Una combinación de

android:padding="0dp" En el xml para la barra de herramientas

y

mToolbar.setContentInsetsAbsolute(0, 0) En el codigo

Esto funcionó para mí.

Jraco11
fuente
1

Esto funciona para mí en mi teléfono Android 7.11:

<!-- TOOLBAR -->
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:contentInsetStartWithNavigation="0dp">

    <TextView
        style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
        android:id="@+id/toolbar_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/create_account_title"
        android:textColor="@color/color_dark_grey"/>

</android.support.v7.widget.Toolbar>

nota: no tuve absolutamente ningún éxito con padding = 0, o contentInsetLeft = 0, o contentInsetStart = 0

Alguien en algún lugar
fuente
0

Ok, si necesita 72dp, ¿no podría simplemente agregar la diferencia en el relleno en el archivo xml? De esta manera, mantienes el recuadro / relleno predeterminado de Android que quieren que usemos.

Entonces: 72-16 = 56

Por lo tanto: agregue un relleno de 56dp para ubicarse en un total de sangría / margen de 72dp.

O simplemente puede cambiar los valores en los archivos Dimen.xml. eso es lo que estoy haciendo ahora. Cambia todo, el diseño completo, incluida la barra de herramientas cuando se implementa en la nueva forma adecuada de Android.

Dimen Resource File

El enlace que agregué muestra los valores de Dimen en 2dp porque lo cambié pero estaba configurado por defecto en 16dp. Solo para tu información...

JamisonMan111
fuente
-2
((Toolbar)actionBar.getCustomView().getParent()).setContentInsetsAbsolute(0,0);
Ahmet Zorer
fuente