Прокладка інструментів 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.