Как правильно оформить com.google. android .material.textfield.TextInputLayout? - PullRequest
2 голосов
/ 09 марта 2020

У нас есть фирменное приложение с множеством разных вкусов, и недавно мы перешли на компоненты Material. С тех пор внезапно все TextInputLayouts имеют этот уродливый серый фон

enter image description here

Я прочитал документацию Google в https://material.io/develop/android/components/text-input-layout/ и нашел boxBackgroundColor, который работает нормально, когда используется непосредственно в макете xml, например:

        <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/edit_gsm_groupname_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ** app:boxBackgroundColor="?attr/theme_backColor" **
        android:layout_alignBottom="@+id/edit_gsm_icon"
        android:layout_toEndOf="@+id/edit_gsm_icon">

Из-за размера приложения и количества используемых полей ввода, он на самом деле не является жизнеспособным возможность поместить эту строку в каждый макет, который у нас есть.

Итак, я попытался решить ее с помощью стилей, у нас уже есть десятки активных.

Я пытался в AlertTheme и AppTheme, например так:

    <style name="baseAppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    ... lots of settings...

    <!--Custom animations-->
    <item name="colorPrimaryDark">?attr/theme_branding_01</item>
    <item name="colorPrimary">?attr/theme_branding_02</item>
    <item name="colorPrimaryLight">?attr/theme_branding_05</item>
    <item name="colorAccent">?attr/theme_branding_03</item>

    <!--Control coloring-->
    <item name="android:colorBackground">?attr/theme_branding_14</item>
    <item name="android:colorForeground">?attr/theme_branding_11</item>
    <item name="colorControlNormal">?attr/theme_branding_11</item>
    <item name="colorControlActivated">?attr/colorAccent</item>
    <item name="android:textColor">@color/base_active_inactive_text_colors</item>
    <item name="android:editTextColor">?attr/theme_branding_11</item>
    <item name="android:textColorHint">?attr/colorAccent</item>
    ** <item name="boxBackgroundColor">?attr/theme_branding_14</item>  **


    <!--System properties-->
    <item name="android:windowBackground">?attr/theme_branding_14</item>
    <item name="android:textColorPrimary">?attr/theme_branding_14</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">?attr/colorPrimaryDark</item>
    <item name="materialAlertDialogTheme">@style/baseAlertDialogTheme</item>
</style>

<style name="baseAlertDialogTheme" parent="Theme.MaterialComponents.Light.Dialog.Alert">

    <!--Control coloring-->
    <item name="android:windowBackground">?attr/theme_branding_14</item>
    <item name="android:colorBackground">?attr/theme_branding_14</item>
    <item name="android:colorForeground">?attr/theme_branding_11</item>
    <item name="colorControlNormal">?attr/theme_branding_11</item>
    <item name="colorControlActivated">?attr/colorAccent</item>
    <item name="android:textColor">?attr/theme_branding_11</item>
    <item name="android:editTextColor">?attr/theme_branding_11</item>
    <item name="android:textColorHint">?attr/colorAccent</item>
    ** <item name="boxBackgroundColor">?attr/theme_branding_14</item>  **

    <!--Alert dialog colors-->
    <item name="android:textColorPrimary">?attr/theme_branding_11</item>
    <item name="android:background">?attr/theme_branding_14</item>

    <!--Alert button colors-->
    ... button styles ...
    <item name="android:buttonBarPositiveButtonStyle">@style/baseAlertDialogButton</item>

</style>

Но почему-то boxBackgroundColor, кажется, не действует при установке через стили. Я нашел этот вопрос Материалы Стили TextInputLayout не работают , где сказано, что это не работает в режиме предварительного просмотра, но я попытался передать sh на устройства - это не работает во время выполнения либо.

Решение для этого было бы замечательно - Как я могу избавиться от этого серого фона? Он должен иметь нормальный цвет фона, как это было со старым TextInputLayout.

Заранее спасибо, ура, Гри

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Вы не можете использовать boxBackgroundColor в теме приложения.

Вместо этого вы можете глобально определить стиль, используемый TextInputLayout в вашем тема приложения с атрибутом textInputStyle:

<style name="baseAppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    ...
    <item name="textInputStyle">@style/myFilledBox</item>
</style>

с:

<style name="myFilledBox" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
   <item name="boxBackgroundColor">@color/filled_background_color_selector</item>
</style>
0 голосов
/ 09 марта 2020

Даже когда я сталкивался с подобной проблемой, я использовал textinputlayout описанным ниже способом, это прекрасно работает.

 <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/enterEmailTextLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        >

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/enteredEmailEditText"
            style="@style/Nunito_Sans_Roman"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:backgroundTint="@color/white_100"
            android:clickable="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
          />
    </com.google.android.material.textfield.TextInputLayout>

Вы можете попробовать это, если это соответствует вашим требованиям. Надеюсь, это поможет

...