Android API 21 Padbar Toolbar


193

Jak pozbyć się dodatkowego dopełnienia w nowym pasku narzędzi Toolbar z Android SDK API w wersji 21 (biblioteka obsługi)?

Mówię o czerwonych strzałkach na tym obrazku: wprowadź opis zdjęcia tutaj

Oto kod, którego używam:

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

Jak widać, ustawiłem wszystkie odpowiednie wypełnienia na 0, ale wokół Błystki nadal jest wypełnienie. Co zrobiłem źle lub co muszę zrobić, aby pozbyć się dodatkowej wyściółki?

Edytuj Niektórzy pytają, dlaczego próbuję to zrobić.

Zgodnie ze specyfikacją Material Design spinner powinien mieć 72dp od lewej strony opis

Muszę zneutralizować podkładkę, którą Google tam umieścił, aby prawidłowo umieścić mój spinner: opis

Edytuj 2

Zgodnie z odpowiedzią Chrisa Bane'a poniżej ustawiam contentInsetStart na 0. W bibliotece wsparcia musisz użyć przestrzeni nazw aplikacji:

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

Mam nadzieję, że to komuś pomaga, przez kilka dni byłem zdezorientowany.


4
Czy zdążyłeś również usunąć górne / dolne wypełnienia? Próbowałem, ale nic się nie zdarzyło nawet ustawienie wszystkich contentInsetXwłaściwości na 0dp.
patrickjason91

podobnie jak @ patrickjason91, czy można wyrównać ImageView z górną częścią paska narzędzi (obraz ma w, h: wrap_content) wewnątrz paska narzędzi? Próbowałem wszystkiego, ale nie mogłem tego zrobić. Moim celem jest, aby obraz wstążki zakładki „wisiał” u góry paska narzędzi, założę się, że zawsze jest jakieś wypełnienie, którego nie mogę go wyeliminować
Ewoks

Odpowiedzi:


280

Lewa wstawka jest spowodowana przez pasek narzędzi Toolbar, contentInsetStartktóry domyślnie ma 16dp.

Zmień to na 72dp, aby wyrównać do linii horyzontu.

Aktualizacja dla biblioteki wsparcia v24.0.0:

Aby dopasować specyfikację Material Design, istnieje dodatkowy atrybut, contentInsetStartWithNavigationktóry domyślnie wynosi 16dp. Zmień to, jeśli masz także ikonę nawigacji.


Dziękuję bardzo za to. Wydaje się jednak nieco dziwne odejście od obicia i marginesu. Czy to jest Android 5?
James Cross

1
ContentInsetStart służy do wstawiania z dowolnego interfejsu użytkownika podanego na pasku narzędzi (na przykład ikony nawigacji).
Chris Banes

Jak wyrównać przycisk radiowy z ikoną na pasku narzędzi? Mam podobne problemy: stackoverflow.com/questions/26623042/...
Ferran Negre

Istnieje także titleMarginStart attr dla dopełnienia tytułu
deviant

2
ustawienie contentInsetStartWithNavigationna 0 wykonało dla mnie lewą akcję z obsługą v4: 25.0.1
Quentin G.

145

Powyższa odpowiedź jest poprawna, ale wciąż jest jedna rzecz, która może powodować problemy (Przynajmniej stworzyło to problem dla mnie)

Użyłem następujących i nie działa poprawnie na starszych urządzeniach -

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

Sztuczka jest tutaj, wystarczy użyć następujących -

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

i pozbyć się -

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

A teraz powinno działać dobrze na wszystkich urządzeniach.

Mam nadzieję, że to pomoże.


to może być zachowanie domyślne. Dzięki =)
Luciano Rodríguez,

2
Nie działa dla CollapsingToolBarLayout. Proszę pomóż mi .
Aslam Hossin

dodanie Androida: padding = "0dp" pomogło mi
AITAALI_ABDERRAHMANE

1
wraz z 4 wymienionymi powyżej, app:contentInsetStartWithNavigationmoże pomóc naprawić rzeczy, jeśli jeszcze nie wystarczy
computingfreak

10

Po prostu dodaj tę dwie linie na pasku narzędzi. Następnie otrzymujemy nową usuniętą lewą spację bcoz domyślnie to 16dp.

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

9

Jeśli ktoś potknie się tutaj ... możesz również ustawić dopełnienie , na przykład:

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

int padding = 200 // padding left and right

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

Lub contentInset :

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

nie musisz konwertować wypełnienia na dp i brać pod uwagę gęstość wyświetlania.
Ktoś gdzieś

3

Oto co zrobiłem i działa idealnie na każdej wersji Androida.

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 (Aby ukryć domyślny tytuł paska narzędzi)

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

Wynik z pokazaną linią klawiszy

wprowadź opis zdjęcia tutaj


3

Ustaw pasek narzędzi w następujący sposób:

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

Musisz dodać

contentInset

atrybut, aby dodać odstępy

kliknij ten link, aby uzyskać więcej - Wskazówki dotyczące Androida


3

Kombinacją

android:padding="0dp" W pliku XML paska narzędzi

i

mToolbar.setContentInsetsAbsolute(0, 0) W kodzie

To zadziałało dla mnie.


1

to działa dla mnie na moim telefonie z Androidem 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>

Uwaga: Absolutnie nie odniosłem sukcesu z padding = 0 lub contentInsetLeft = 0 lub contentInsetStart = 0


0

Ok, więc jeśli potrzebujesz 72dp, nie możesz po prostu dodać różnicy w dopełnieniu w pliku xml? W ten sposób zachowujesz domyślną wstawkę / wypełnienie dla Androidów, których chcą od nas używać.

Więc: 72-16 = 56

Dlatego: dodaj dopełnienie 56dp, aby uzyskać łączne wcięcie / margines 72dp.

Lub możesz po prostu zmienić wartości w plikach Dimen.xml. właśnie to robię. Zmienia wszystko, cały układ, w tym pasek narzędzi, gdy jest implementowany w nowy, właściwy sposób na Androida.

Dimen Resource File

Link, który dodałem, pokazuje wartości Dimen przy 2dp, ponieważ go zmieniłem, ale domyślnie był ustawiony na 16dp. Po prostu dla ciebie ...


-2
((Toolbar)actionBar.getCustomView().getParent()).setContentInsetsAbsolute(0,0);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.