как изменить размер текстового поля и отключить плавающую метку в TextInputLayout?

Я использую библиотеку дизайна материалов, чтобы сделать закругленный текст редактирования, и я смог это сделать, но теперь я хочу, чтобы он выглядел немного меньше, я использовал стиль плотного текстового поля, но я все еще хочу, чтобы высота представления была меньше чем это. Проблема в том, что плавающий тег Label, я не установил подсказку для textField, но тег Label по-прежнему занимает пустое место.

<com.google.android.material.textfield.TextInputLayout
        style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.Dense"
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:endIconMode="custom"
        app:endIconDrawable="@drawable/ic_speaker_24dp"
        app:layout_constraintBottom_toBottomOf="@+id/topBar_view"
        app:layout_constraintEnd_toEndOf="@+id/topBar_view"
        app:layout_constraintStart_toEndOf="@+id/separater_line"
        app:layout_constraintTop_toTopOf="parent"
        app:boxCornerRadiusTopStart="20dp"
        app:boxCornerRadiusTopEnd="20dp"
        app:boxCornerRadiusBottomStart="20dp"
        app:boxCornerRadiusBottomEnd="20dp">

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

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

Я просто хочу, чтобы текстовое поле выглядело как хромированная панель поиска URL-адресов, тонкая, а подсказка исчезала при наборе текста, а не как плавающая метка.

Редактировать: я попробовал использовать атрибут app:hintEnabled="false", но все еще есть пустое место.


comment
Попробуйте также приложение:hintAnimationEnabled=false   -  person Anas Mehar    schedule 03.09.2019
comment
Это тоже не сработало   -  person Ziad H.    schedule 03.09.2019
comment
попробуйте это приложение:hintEnabled=false внутри тега TextInputLayout   -  person unzila    schedule 03.09.2019


Ответы (3)


Вы можете использовать app:hintEnabled="false", чтобы отключить функцию плавающей метки. Также вы можете настроить плотный стиль.

Вы можете использовать что-то вроде:

  <com.google.android.material.textfield.TextInputLayout
        app:hintEnabled="false"
        style="@style/MyDenseOutlined"
        ...>

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

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

с этим стилем:

  <style name="MyDenseOutlined" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
    <item name="materialThemeOverlay">@style/MyThemeOverlayOutlinedDense</item>

  </style>

  <style name="MyThemeOverlayOutlinedDense">
    <item name="editTextStyle">@style/MyTextInputEditText_outlinedBox_dense_h
    </item>
  </style>

  <style name="MyTextInputEditText_outlinedBox_dense_h" parent="@style/Widget.MaterialComponents.TextInputEditText.OutlinedBox.Dense">
    <item name="android:paddingTop">8dp</item>
    <item name="android:paddingBottom">8dp</item>
  </style>

Вот результаты (со стилем по умолчанию и пользовательским стилем):

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

person Gabriele Mariotti    schedule 03.09.2019
comment
Это отлично сработало для меня, но могу ли я понять, почему мы сделали 3 стиля, ссылаясь друг на друга, вместо того, чтобы сделать один напрямую? Эта штука меня немного смутила. - person Ziad H.; 04.09.2019
comment
Это не так просто. editTextStyle — это атрибут, определенный на уровне AppTheme, и он используется всеми компонентами (например, colorPrimary). Вы не можете использовать его внутри стиля TextInputLayout.OutlinedBox. Атрибут materialThemeOverlay позволяет переопределить атрибуты темы для этого конкретного стиля (MyDenseOutlined). Таким образом, только компонент с этим стилем будет использовать пользовательский editTextStyle. - person Gabriele Mariotti; 04.09.2019
comment
Я не вижу разницы в результате по сравнению с ответом nh7, который намного проще, НО я думаю, что все эти решения плохие. Если вам не нужна подсказка, вы можете использовать EditText. Я использую TextInputLayout из-за подсказки. Я не вижу никакой другой выгоды, если вы уже изменили его стиль. - person The incredible Jan; 29.06.2021

Просто установите отступ TextInputEditText, например, на 8dp. В этом случае не следует устанавливать метку/подсказку.

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

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/input_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="8dp"
                android:text="Some text" />

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

Будет выглядеть так: отступ установлен на 8dp

person nh7    schedule 16.10.2020

<com.google.android.material.textfield.TextInputLayout
                android:id="@+id/etemailLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint=" ">

        <EditText
            android:id="@+id/txtemail"
            style="@style/login_edittext"
            android:hint="Enter Your Email Address"
            android:inputType="textEmailAddress" />

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

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/etPasswordLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint=" "
        android:scrollbars="vertical"
        app:counterEnabled="true"
        app:passwordToggleEnabled="true">

        <EditText
            android:id="@+id/txtpassword"
            style="@style/login_edittext"
            android:hint="Enter Password"
            android:inputType="textPassword"
            android:maxLength="8"
            android:scrollbars="vertical" />

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

для применения стиля к вашему EditText поместите ниже код в Styles.xml..

<style name="login_edittext">
        <item name="android:layout_marginTop">15dp</item>
        <item name="android:background">@drawable/edittext_background</item>
        <item name="android:textColorHint">#FFFFFF</item>
        <item name="android:textColor">#FFFFFF</item>
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

для фонового эффекта создайте edittext_background.xml в drawable..

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners android:radius="7dp" />
    <solid android:color="#80ffffff" />
    <padding android:left="10dp" android:right="10dp"
        android:top="10dp" android:bottom="10dp" />
    <stroke android:width="2dp" android:color="#FFFFFF" />
</shape>
person Ankita Bhatt    schedule 27.05.2020