Android API 21 Padding панели инструментов

193

Как избавиться от дополнительных отступов в новой панели инструментов с Android SDK API версии 21 (библиотека поддержки)?

Я говорю о красных стрелках на этой картинке: введите описание изображения здесь

Вот код, который я использую:

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

Как вы можете видеть, я установил все соответствующие отступы на 0, но вокруг Spinner все еще есть отступы. Что я сделал не так или что мне нужно сделать, чтобы избавиться от дополнительного заполнения?

Редактировать Некоторые задаются вопросом, почему я пытаюсь это сделать.

Согласно спецификациям Material Design, счетчик должен быть 72dp с левой стороны по убыванию

Мне нужно нейтрализовать заполнение, которое Google поместил туда, чтобы правильно разместить мой счетчик: по убыванию

Редактировать 2

В соответствии с ответом Криса Бэйна ниже я установил contentInsetStart в 0. Для библиотеки поддержки вам нужно будет использовать пространство имен приложения:

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

Надеюсь, это кому-то поможет, меня это смутило несколько дней.

Джеймс Кросс
источник
4
Вам также удалось удалить верхние / нижние прокладки? Я пытался, но ничего не происходит, даже устанавливая все contentInsetXсвойства в 0dp.
patrickjason91
похоже на @ patrickjason91 можно ли выровнять ImageView с верхом панели инструментов (изображение имеет w, h: wrap_content) внутри панели инструментов? Я пробовал все, но не смог сделать это .. Моя цель - сделать так, чтобы изображение ленты закладок "висело" на верхней части панели инструментов, держу пари, что всегда есть некоторые отступы, которые я не могу устранить
Ewoks

Ответы:

280

Левая вставка вызвана contentInsetStartпанелями инструментов, которые по умолчанию составляют 16dp.

Измените это на 72dp, чтобы выровнять к ключевой линии.

Обновление для библиотеки поддержки v24.0.0:

Для соответствия спецификации Material Design есть дополнительный атрибут, contentInsetStartWithNavigationкоторый по умолчанию равен 16dp. Измените это, если у вас также есть значок навигации.

Крис Бейнс
источник
Спасибо тебе большое за это. Хотя кажется немного странным отойти от отступов и отступов. Это андроид 5 вещь?
Джеймс Кросс
1
ContentInsetStart используется для вставки из любого интерфейса панели инструментов (например, значка навигации).
Крис Бейнс
А как бы вы выровняли радио кнопку с иконкой на панели инструментов? У меня есть похожие проблемы: stackoverflow.com/questions/26623042/…
Ferran Negre
Существует также titleMarginStart attr для заполнения заголовка
deviant
2
установка contentInsetStartWithNavigation0 сделала свое дело с support-v4: 25.0.1
Квентин Г.
145

Вышеуказанный ответ верен, но есть еще одна вещь, которая может создать проблемы (по крайней мере, это создало проблему для меня)

Я использовал следующее, и оно не работает должным образом на старых устройствах -

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

Хитрость здесь заключается в том, чтобы использовать следующее -

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

и избавиться от -

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

И теперь он должен нормально работать на всех устройствах.

Надеюсь, поможет.

Varundroid
источник
это может быть поведение по умолчанию. Спасибо =)
Лучано Родригес
2
Не работает для CollapsingToolBarLayout. Пожалуйста, помогите мне .
Аслам Хоссин
добавление андроида: padding = "0dp" помог мне
AITAALI_ABDERRAHMANE
1
вместе с 4, указанными выше, app:contentInsetStartWithNavigationможет помочь исправить положение, если этого недостаточно,
computerfreak
10

Просто добавьте две строки на панели инструментов. Затем мы получаем новый удаленный левый боковой пробел bcoz, по умолчанию это 16dp.

android:contentInsetStart="0dp"
app:contentInsetStart="0dp"
Амит Уолк
источник
9

В случае, если здесь кто-то оступится ... вы также можете установить отступы , например:

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

int padding = 200 // padding left and right

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

Или contentInset :

toolbar.setContentInsetsAbsolute(toolbar.getContentInsetLeft(), 200);
работал
источник
Вам не нужно конвертировать отступы в dp и учитывать плотность отображения.
Кто-то где-то
3

Вот что я сделал, и он отлично работает на каждой версии 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 (чтобы скрыть заголовок панели инструментов по умолчанию)

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

Результат с показом Кейлина

введите описание изображения здесь

Майкл
источник
3

Сделайте вашу панель инструментов похожей на:

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

Вам нужно добавить

contentInset

атрибут для добавления пробела

Пожалуйста, перейдите по этой ссылке для более - Android Советы

Анех Такур
источник
3

Сочетание

android:padding="0dp" В XML для панели инструментов

и

mToolbar.setContentInsetsAbsolute(0, 0) В коде

Это сработало для меня.

Jraco11
источник
1

это работает для меня на моем телефоне 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>

примечание: у меня не было абсолютно никакого успеха с padding = 0, или contentInsetLeft = 0, или contentInsetStart = 0

Кто-то где-то
источник
0

Итак, если вам нужно 72dp, не могли бы вы просто добавить разницу в заполнении в XML-файл? Таким образом, вы сохраняете настройки Android по умолчанию Inset / Padding, которые они хотят, чтобы мы использовали.

Итак: 72-16 = 56

Для этого: добавьте отступ 56 дп, чтобы получить общий отступ / отступ 72 дп.

Или вы можете просто изменить значения в файлах Dimen.xml. это то, что я делаю сейчас. Он меняет все, весь макет, включая панель инструментов, когда реализован в новом подходящем для Android стиле.

Файл ресурсов Dimen

Ссылка, которую я добавил, показывает значения Dimen в 2dp, потому что я изменил его, но он был установлен по умолчанию в 16dp. Просто к вашему сведению ...

JamisonMan111
источник
-2
((Toolbar)actionBar.getCustomView().getParent()).setContentInsetsAbsolute(0,0);
Ахмет Зорер
источник