Пользовательский TextInputLayout - PullRequest
1 голос
/ 19 июня 2020

Я хочу, чтобы мой CustomTextInputLayout имел Widget.MaterialComponents.TextInputLayout.OutlinedBox в качестве стиля по умолчанию , не определяя его где-либо в XML.

Я пробовал это

class CustomTextInputLayout @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : TextInputLayout(ContextThemeWrapper(context, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox), attrs, defStyleAttr) {

}

и этот

class CustomTextInputLayout @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : TextInputLayout(context, attrs, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox)

, но он не работает. Я пробовал использовать по умолчанию XML способ

<com.custom.CustomTextInputLayout
    style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
    ...>
    <com.google.android.material.textfield.TextInputEditText
        ...
        android:hint="Sample Hint" />
</com.custom.CustomTextInputLayout>

, и он работает.

  • Что мне здесь не хватает?
  • Как я могу установить стиль по умолчанию для пользовательского TextInputLayout без использования XML?

1 Ответ

1 голос
/ 19 июня 2020

Это не совсем то, что вы ищете. Вы можете определить:

public class CustomTextInputLayout @JvmOverloads constructor(
        context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.textInputStyle
) : TextInputLayout(ContextThemeWrapper(context, R.style.Outlined_Theme), attrs, defStyleAttr) { ...  }

с помощью:

<style name="Outlined.Theme" parent="">
      <item name="textInputStyle">@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox</item>
</style>

Затем в вашем макете используйте:

 <com.example.quicksample.CustomTextInputLayout
       ....
       android:hint="Sample">

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

 </com.example.quicksample.CustomTextInputLayout>

enter image description here

Ваш код не работает, потому что ContextThemeWrapper(context, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox) 2-й параметр должен быть темой атрибута, а не стилем (это то же самое для TextInputLayout(context, attrs, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox))

...