Невозможно применить стиль для пользовательского редактирования текста - PullRequest
1 голос
/ 26 января 2020

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

Это мой класс для пользовательского редактирования текста:

package com.enjoyapps.weddingapp.view;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import androidx.appcompat.view.ContextThemeWrapper;

import com.enjoyapps.weddingapp.R;
import com.google.android.material.textfield.TextInputLayout;

public class CustomEditText extends TextInputLayout {


    public CustomEditText(Context context) {
        super(new ContextThemeWrapper(context, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox));
        init();
    }

    public CustomEditText(Context context, AttributeSet attrs) {
//        super(context, attrs);
        super(new ContextThemeWrapper(context, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox), attrs);
        init();
    }

    public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(new ContextThemeWrapper(context, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox), attrs, defStyleAttr);
        init();
    }

    private void init() {
        setBoxStrokeColor(Color.BLUE);
        setBoxCornerRadii(50,50,50,50);
        setBoxBackgroundColor(Color.BLUE);

    }
}

Как вы можете видите, в Конструкторе я устанавливаю стиль с помощью:

new ContextThemeWrapper(context, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox)

И когда я добавляю текст пользовательского редактирования в xml, он не получает атрибут, который я установил в методе init.

Но когда я применяю ту же тему в xml, она работает и получает атрибут all из метода init.

<com.enjoyapps.weddingapp.view.CustomEditText
    android:layout_width="300dp"
    android:layout_centerInParent="true"
    android:layout_height="50dp">

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

</com.enjoyapps.weddingapp.view.CustomEditText>

Ответы [ 2 ]

1 голос
/ 30 января 2020

Потребовалось немного покопаться, чтобы выяснить проблему. Очевидно, TextInputLayout использует boxBackgroundMode для использования определенных атрибутов из разных стилей.

В дополнение к ContextThemeWrapper, вам необходимо установить boxBackgroundMode для вашего TextInputLayout.

Поэтому, если вы используете:

  • FilledBox: вам нужно использовать BOX_BACKGROUND_FILLED
  • OutlinedBox: вам нужно использовать BOX_BACKGROUND_OUTLINE

В вашем случае просто добавьте setBoxBackgroundMode(BOX_BACKGROUND_OUTLINE) в init():

private void init() {
    // ... some styling here

    setBoxBackgroundMode(BOX_BACKGROUND_OUTLINE);
}
1 голос
/ 26 января 2020

Какой стиль использует ваше приложение? Просто добавьте к своему основному стилю:

<item name="editTextStyle">@style/YourStyle</item>

Пример:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   <!-- Customize your theme here. -->
   <item name="colorPrimary">@color/colorPrimary</item>
   <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
   <item name="colorAccent">@color/colorAccent</item>

   <item name="editTextStyle">@style/YourStyle</item>
</style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...