Прокладка інструментів Android API 21


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/…
Ферран Негре

Є також titleMarginStart attr для замітки заголовка
відхилення

2
встановлення contentInsetStartWithNavigation0 зробило для мене хитрість з підтримкою-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"

І тепер це має справно працювати на всіх пристроях.

Сподіваюся, це допомагає.


це може бути поведінка за замовчуванням. Спасибі =)
Лучано Родрігес

2
Не працює для CollapsingToolBarLayout. Будь ласка, допоможи мені .
Аслам Хоссін

додавання android: padding = "0dp" допомогло мені
AITAALI_ABDERRAHMANE

1
разом із зазначеними вище 4, це app:contentInsetStartWithNavigationможе допомогти виправити речі, якщо цього вже недостатньо
computingfreak

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.

панель інструментів.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

Результат із показаними Keylines

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


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) У коді

Це працювало для мене.


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? Таким чином ви зберігаєте Androids за замовчуванням Inset / Padding, які вони хочуть використовувати.

Отже: 72-16 = 56

Для цього: додайте 56dp прокладки, щоб поставити себе на відступ / маржу в цілому 72dp.

Або ви можете просто змінити значення у файлах Dimen.xml. ось що я зараз роблю. Він змінює все, весь макет, включаючи ToolBar, коли реалізується в новому правильному способі Android.

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

Я додав посилання показує значення Dimen у 2dp, тому що я змінив його, але він був встановлений за замовчуванням у 16dp. Просто FYI ...


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.