Как отключить заполнение на TextInputLayout?

Кажется, что добавлено добавление дополнений при использовании TextInputLayout для обертывания EditText, как вы можете видеть на скриншоте ниже.

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

В макете XML не добавляется дополнение, добавленное к EditText, но когда визуализируется представление, на EditText появляется остальное дополнение. Это можно увидеть при сравнении TextView ниже TextInputLayout.

Как отключить добавление этого левого дополнения?

Спасибо!

Ответ 1

TextInputLayout - это LinearLayout, поэтому вы должны иметь возможность указывать отрицательное поле или дополнение, например.

            android:layout_marginLeft="-2dp"
            android:layout_marginStart="-2dp"

что компенсирует пространство, которое вы пытаетесь устранить.

Значение -2dp - это только предположение; настройте значение до тех пор, пока оно не выстроится так, как вы хотите.

Ответ 2

Мне удалось удалить это оставленное место, сделав копию оригинальной темы фона редактирования текста

Рез/рисуем /my_edit_text_material.xml

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
   android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
   android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
   android:insetTop="@dimen/abc_edit_text_inset_top_material"
   android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">

<selector>
    <item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
    <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
    <item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
</selector>

</inset>

RES/вытяжке-V21/my_edit_text_material.xml

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
<selector>
    <item android:state_enabled="false">
        <nine-patch android:src="@drawable/abc_textfield_default_mtrl_alpha"
            android:tint="?attr/colorControlNormal"
            android:alpha="?android:attr/disabledAlpha"/>
    </item>
    <item android:state_pressed="false" android:state_focused="false">
        <nine-patch android:src="@drawable/abc_textfield_default_mtrl_alpha"
            android:tint="?attr/colorControlNormal"/>
    </item>
    <item>
        <nine-patch android:src="@drawable/abc_textfield_activated_mtrl_alpha"
            android:tint="?attr/colorControlActivated"/>
    </item>
</selector>
</inset>

в двух файлах удалите:

android: insetLeft = "@dimension/abc_edit_text_inset_horizont_material" android: insetRight = "@dimension/abc_edit_text_inset_horizont_material"


Создайте новый стиль для вашего editText и добавьте его в качестве фона

/res/values/styles.xml

<resources>

<!-- Other styles . -->

<style name="AppTheme.EditText" parent="Widget.AppCompat.EditText">
    <item name="android:background">@drawable/my_edit_text_material</item>
</style>
</resources>

Добавьте стиль к своему тексту редактирования

<android.support.design.widget.TextInputLayout
    android:id="@+id/input_layout_lastname"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:layout_marginLeft="0dp"
    android:layout_marginStart="0dp"
    android:textColorHint="@color/Cool_Gray_2_C"
    app:layout_constraintEnd_toStartOf="@+id/profile_guideline_end"
    app:layout_constraintStart_toStartOf="@+id/profile_guideline_start"
    app:layout_constraintTop_toBottomOf="@+id/input_layout_firstname" >

    <EditText
        style="@style/AppTheme.EditText"
        android:id="@+id/txfLastname"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="@string/last_name"
        android:inputType="textPersonName"
        android:textColor="@color/Cool_Gray_2_C"
        android:textColorHint="@color/Cool_Gray_2_C"
        android:textSize="17sp" />

</android.support.design.widget.TextInputLayout>

Так я нашел удаление левого и правого пространства.

Надеюсь помогу, спасибо

Ответ 3

Вы можете просто установить начальный и конечный отступы внутреннего EditText на 0dp.

<com.google.android.material.textfield.TextInputLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

  <com.google.android.material.textfield.TextInputEditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingStart="0dp"
    android:paddingEnd="0dp" />

</com.google.android.material.textfield.TextInputLayout>

Вот снимок экрана с включенной функцией Show Layout Bounds, чтобы вы могли видеть, что подсказки идут до самого края представления.

EditTextNoPadding

Ответ 4

Я знаю, что это немного поздно для вечеринки, но я смог удалить вставку в тексте редактирования в TextInputLayout просто переопределив значение @dimen/abc_edit_text_inset_horizontal_material в res/dimens.xml:

<resources xmlns:tools="http://schemas.android.com/tools">

    ... normal dimension resources ...

    <!-- Prevent TextInputLayout from adding a platform-dependent inset to edit text 
         to make it possible to align with other controls in a dialog -->
    <dimen name="abc_edit_text_inset_horizontal_material" tools:override="true">0dp</dimen>

</resources>

Тогда ВСЕ экземпляры TextInputLayout больше не будут иметь никаких дополнительных отступов слева и справа от EditText и вам не придется искусственно добавлять отрицательный отступ к EditText который может быть некорректным на всех платформах и уровнях API.

Ответ 5

Горизонтальное пространство слева и справа от отрисовки по умолчанию EditText контролируется измерением abc_edit_text_inset_horizontal_material. Вы можете убедиться в этом, посмотрев нарисованный файл abc_edit_text_material.xml, который представляет собой фон EditText AppCompat по умолчанию. Чтобы полностью удалить пробел, вы можете просто установить размер 0, указав размер с точно таким же именем в файле вашего собственного проекта dimens.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
    <dimen tools:override="true" name="abc_edit_text_inset_horizontal_material">0dp</dimen>
    ...
</resources>

Однако здесь есть одна загвоздка. Библиотека AppCompat будет использовать собственный фон abc_edit_text_material.xml только в том случае, если хост-ОС не поддерживает дизайн материала. Поэтому, если вы запускаете свое приложение на Android 4, вы увидите, что боковые поля исчезают после добавления размера, упомянутого выше. Однако, если вы запустите свое приложение, скажем, на Android 10, вы увидите, что поля остаются. Это связано с тем, что в новых версиях Android библиотека compat на самом деле предпочитает рисование фона, заданное внутри самой ОС.

Таким образом, вам нужно заставить все ваши EditTexts использовать фон abc_edit_text_material.xml, указанный в библиотеке AppCompat. К счастью, вы можете сделать это, просто добавив одну строку в файл syles.xml:

styles.xml:
<resources xmlns:tools="http://schemas.android.com/tools">
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <item name="editTextBackground">@drawable/abc_edit_text_material</item>
        ...
    </style>
    ...
</resources>

Любой Theme.AppCompat.* будет использоваться в качестве родительской темы, и, конечно, вы должны использовать эту тему в качестве темы своего приложения, чтобы получить какой-либо эффект.

Это решение использует частные идентификаторы AppCompat (Android Studio будет жаловаться на это), но я все еще думаю, что это решение намного чище, чем использование отрицательных полей.

Ответ 6

С помощью TextInputLayout, включенного в Библиотеку компонентов материала, вы можете использовать собственный стиль для уменьшения заполнения.

Просто используйте что-то вроде:

<com.google.android.material.textfield.TextInputLayout
       ....
       android:hint="Hint text"       
       style="@style/My.TextInputLayout.FilledBox.Padding" >

Затем вы можете определить (для этого требуется версия 1.1.0) собственный стиль для EditText, используя атрибут materialThemeOverlay:

  <style name="My.TextInputLayout.FilledBox.Padding" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
    <item name="materialThemeOverlay">@style/MyThemeOverlayFilledPadding</item>
  </style>

  <style name="MyThemeOverlayFilledPadding">
    <item name="editTextStyle">@style/MyTextInputEditText_filledBox_padding</item>
  </style>

  <style name="MyTextInputEditText_filledBox_padding" parent="@style/Widget.MaterialComponents.TextInputEditText.FilledBox">
    <!-- left and right padding -->
    <item name="android:paddingStart" ns2:ignore="NewApi">2dp</item>
    <item name="android:paddingEnd" ns2:ignore="NewApi">2dp</item>
    <item name="android:paddingLeft">2dp</item>
    <item name="android:paddingRight">2dp</item>

    <!-- top and bottom padding -->
    <item name="android:paddingTop">28dp</item>
    <item name="android:paddingBottom">12dp</item>
  </style>

Вот итоговый результат:

enter image description hereenter image description here