Preenchimento da barra de ferramentas da API 21 do Android


193

Como faço para me livrar do preenchimento extra na nova barra de ferramentas com a API do SDK do Android versão 21 (a biblioteca de suporte)?

Eu estou falando sobre as setas vermelhas nesta imagem: insira a descrição da imagem aqui

Aqui está o código que estou 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 você pode ver, defini todo o preenchimento relevante como 0, mas ainda há preenchimento no Spinner. O que fiz de errado ou o que preciso fazer para me livrar do preenchimento extra?

Editar Alguns questionaram por que estou tentando fazer isso.

De acordo com as especificações do projeto de material, o botão giratório deve estar a 72dp do lado esquerdo desc

Preciso neutralizar o preenchimento que o Google colocou lá para colocar corretamente meu botão giratório: desc

Editar 2

Conforme a resposta de Chris Bane abaixo, defino o contentInsetStart como 0. Para a biblioteca de suporte, você precisará usar o namespace do aplicativo:

<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 isso ajude alguém, fiquei confuso por vários dias.


4
você também conseguiu remover os revestimentos superior / inferior? Eu tentei, mas nada acontece, mesmo definindo todas as contentInsetXpropriedades para 0dp.
patrickjason91

semelhante a @ patrickjason91, é possível alinhar o ImageView com a parte superior da barra de ferramentas (a imagem possui w, h: wrap_content) dentro da barra de ferramentas? Eu estava tentando de tudo, mas não consegui. Meu objetivo é ter algo como a imagem da fita do marcador "pendurada" na parte superior da barra de ferramentas, aposto que sempre há algum preenchimento que não posso eliminá-lo
Ewoks

Respostas:


280

A inserção esquerda é causada pela barra de ferramentas, contentInsetStartque por padrão é 16dp.

Altere para 72dp para alinhar com a linha-chave.

Atualização para a biblioteca de suporte v24.0.0:

Para corresponder à especificação do Material Design, há um atributo adicional contentInsetStartWithNavigationque, por padrão, é 16dp. Altere isso se você também tiver um ícone de navegação.


Muito obrigado por isso. Parece um pouco estranho se afastar do preenchimento e da margem. Isso é uma coisa do android 5?
James Cross

1
O contentInsetStart é usado para inserir em qualquer interface de usuário fornecida pela barra de ferramentas (por exemplo, o ícone de navegação).
quer

E como você alinharia o botão de opção com o ícone na barra de ferramentas? Eu tenho problemas semelhantes: stackoverflow.com/questions/26623042/…
Ferran Negre

Há também titleMarginStart attr para preenchimento de título
desviante

2
definindo contentInsetStartWithNavigationa 0 fez o truque para mim, com o apoio-v4: 25.0.1
Quentin G.

145

A resposta acima está correta, mas ainda há uma coisa que pode criar problemas (pelo menos, isso criou um problema para mim)

Usei o seguinte e ele não funciona corretamente em dispositivos mais antigos -

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

O truque é aqui, basta usar o seguinte -

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

e se livrar de -

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

E agora deve funcionar bem em todos os dispositivos.

Espero que ajude.


esse pode ser o comportamento padrão. Obrigado =)
Luciano Rodríguez

2
Não está funcionando para CollapsingToolBarLayout. Por favor me ajude .
Aslam Hossin

adicionando android: padding = "0dp" me ajudou
AITAALI_ABDERRAHMANE

1
juntamente com o 4 dito acima, app:contentInsetStartWithNavigationpoder ajudar a corrigir as coisas se já não o suficiente
computingfreak

10

Simpley adiciona essas duas linhas na barra de ferramentas. Em seguida, obtemos o novo espaço esquerdo removido bcoz por padrão, 16dp.

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

9

No caso de alguém tropeçar aqui ... você também pode definir o preenchimento , por exemplo:

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

int padding = 200 // padding left and right

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

Ou contentInset :

toolbar.setContentInsetsAbsolute(toolbar.getContentInsetLeft(), 200);

você não precisa converter o preenchimento em dp e levar em consideração a densidade da tela.
Alguém em algum lugar

3

Aqui está o que eu fiz e funciona perfeitamente em todas as versões do 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 o título da barra de ferramentas padrão)

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

Resultado com linhas-chave exibidas

insira a descrição da imagem aqui


3

Faça sua barra de ferramentas 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>

Você precisa adicionar

contentInset

atributo para adicionar espaçamento

siga este link para mais informações - Android Tips


3

Uma combinação de

android:padding="0dp" No xml da barra de ferramentas

e

mToolbar.setContentInsetsAbsolute(0, 0) No código

Isso funcionou para mim.


1

isso funciona para mim no meu telefone 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: não tive absolutamente nenhum sucesso com padding = 0 ou contentInsetLeft = 0 ou contentInsetStart = 0


0

Ok, então se você precisar de 72dp, não poderia simplesmente adicionar a diferença de preenchimento no arquivo xml? Dessa forma, você mantém o Android Inset / Padding padrão que eles querem que usemos.

Então: 72-16 = 56

Para isso: adicione preenchimento de 56dp para se colocar em um total de recuo / margem de 72dp.

Ou você pode simplesmente alterar os valores nos arquivos Dimen.xml. é isso que estou fazendo agora. Ele muda tudo, todo o layout, incluindo a Barra de Ferramentas, quando implementada da nova maneira adequada do Android.

Arquivo de Recurso Dimen

O link que eu adicionei mostra os valores do Dimen em 2dp porque eu mudei, mas era o padrão definido em 16dp. Apenas para sua informação ...


-2
((Toolbar)actionBar.getCustomView().getParent()).setContentInsetsAbsolute(0,0);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.