Как исправить красный цвет фона в пользовательском вводе текста - PullRequest
1 голос
/ 08 ноября 2019

Textinputlayout фон показывает красный цвет после задания пользовательского фона для редактирования текста при возникновении ошибки.

Я использую собственный textinputlayout для размещения app:hintEnabled="false"

<com.google.android.material.textfield.TextInputLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintLeft_toRightOf="@+id/tvFirstNameSecondTest"
    app:layout_constraintRight_toRightOf="parent"
    android:id="@+id/tilLastNameSecondTest"
    app:layout_constraintHorizontal_weight="1"
    app:hintEnabled="false"
    android:layout_marginTop="8dp"
    android:layout_marginStart="@dimen/margin_4dp"
    android:layout_marginEnd="@dimen/margin_16dp"
    app:layout_constraintTop_toBottomOf="@+id/tvFirstNameThirdTest">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_form_filling"
        android:id="@+id/etTilLastNameSecondTest"/>
</com.google.android.material.textfield.TextInputLayout>

Мой файл Kotlin

class FarmerForm : AppCompatActivity() {

lateinit var context: Context
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_farmer_form)
    setSupportActionBar(toolbar)
    context = this
    val updateProfileValidation = AwesomeValidation(ValidationStyle.TEXT_INPUT_LAYOUT)
    updateProfileValidation.addValidation(
        this,
        R.id.tilFirstNameFirstTest,
        RegexTemplate.NOT_EMPTY,
        R.string.txt_enter_valid_name
    )
    btnRegister.setOnClickListener {
        if(updateProfileValidation.validate()){
            Toast.makeText(this, "Form Validated Successfully", Toast.LENGTH_LONG).show();
        }else {
            if(tilFirstNameFirstTest.error!=null){
                etTilFirstNameFirstTest.background = resources.getDrawable(R.drawable.bg_form_error)
            }
        }
    }
}

Drawable XML-файл

<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/colorWhite"/>
<corners android:radius="@dimen/margin_4dp"/>
<stroke
    android:width="2dp"
    android:color="#ff0000"/>
<padding
    android:left="8dp"
    android:top="10dp"
    android:bottom="10dp"
    android:right="8dp"/>

Как исправить эту ошибку.

Ответы [ 4 ]

0 голосов
/ 08 ноября 2019

для пользовательского textinputlayout. Вам просто нужно создать пользовательский EditText и переопределить его метод getBackground (), чтобы он возвращал новый чертеж. Таким образом, TextInputLayout не сможет установить цветной фильтр на фоне EditText, так как вы не возвращаете фон EditText, а какой-то другой объект рисования. Смотрите ниже:

@Override
public Drawable getBackground() {
    return ContextCompat.getDrawable(getContext(), R.drawable.some_drawable);
}

и используйте собственный EditText внутри TextInputLayout:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

        <CustomEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/custom_edit_text_bg" />

</android.support.design.widget.TextInputLayout>
0 голосов
/ 08 ноября 2019

Чтобы установить цвет фона для вашего поля TextInput, используйте правильный формат для TextInputLayout вместо кода ниже,

<com.google.android.material.textfield.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@+id/tvFirstNameSecondTest"
app:layout_constraintRight_toRightOf="parent"
android:id="@+id/tilLastNameSecondTest"
app:layout_constraintHorizontal_weight="1"
app:hintEnabled="false"
android:layout_marginTop="8dp"
android:layout_marginStart="@dimen/margin_4dp"
android:layout_marginEnd="@dimen/margin_16dp"
app:layout_constraintTop_toBottomOf="@+id/tvFirstNameThirdTest">

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_form_filling"
    android:id="@+id/etTilLastNameSecondTest"/>

используйте это:

<com.google.android.material.textfield.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@+id/tvFirstNameSecondTest"
app:layout_constraintRight_toRightOf="parent"
android:id="@+id/tilLastNameSecondTest"
**app:boxBackgroundColor="@color/green"**
app:layout_constraintHorizontal_weight="1"
app:hintEnabled="false"
android:layout_marginTop="8dp"
android:layout_marginStart="@dimen/margin_4dp"
android:layout_marginEnd="@dimen/margin_16dp"
app:layout_constraintTop_toBottomOf="@+id/tvFirstNameThirdTest">

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

Это следующие изменения: замените EditText на " com.google.android.material.textfield.TextInputEditText " и добавьте " app: boxBackgroundColor =" @ color / red "". это избавит от ошибки, которую вы получаете, и вы также сможете достичь стиля, который вы хотите, чтобы InputBox имел

0 голосов
/ 08 ноября 2019

Вы можете добавить editTextBackground цвет в стиле вашей темы деятельности, например,

файл styles.xml

 <style name="BaseTheme_FullScreen2" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="windowActionBar">false</item>
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
            <item name="android:textColorHint">@color/white</item>
            <item name="editTextBackground">@color/yellow</item>
            <item name="actionBarSize">48dp</item>
            <item name="android:actionBarSize">56dp</item>
            <item name="android:windowContentOverlay">@null</item>
            <item name="colorControlNormal">@color/bg_color</item>
            <item name="colorControlActivated">@color/white</item>
            <item name="android:actionMenuTextAppearance">@style/AppTheme.PopupOverlay</item>
        </style>

AndroidManifest.xml

 <activity
        android:name=".modules.mainModule.homeScreen.HomeActivity"
        android:label="@string/title_activity_home"
        android:theme="@style/BaseTheme_FullScreen2"
        android:windowSoftInputMode="adjustResize|adjustPan"></activity>
0 голосов
/ 08 ноября 2019

Чтобы изменить цвет фона заполненного текстового поля, вы можете:

  • установить атрибут boxBackgroundColor на TextInputLayout
  • , используяметоды textInputLayout.setBoxBackgroundColorResource() и textInputLayout.setBoxBackgroundColor().

Также для изменения хода TextInputLayout вы можете использовать:

  • textInputLayout.setBoxCornerRadii() для изменения угловых радиусов
  • textInputLayout.setBoxStrokeColor() для изменения цвета обводки

Наконец, используйте com.google.android.material.textfield.TextInputEditText вместо EditText.

...