如何在 android 中动态设置 TextInputLayout 的样式?

How Can I set style to TextInputLayout by dynamically in android?

我想动态创建TexInputLayout。我可以使用以下代码块创建 TextInputLayout :

TextInputLayout til = new TextInputLayout(this);
EditText et = new EditText(this);
til.addView(et);
et.setHint("Enter");
information.addView(til);

信息是我在项目中使用的线性布局的名称。

但我想更改动态创建的 TextInputLaout 的样式,我想使用 @style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.

我尝试了以下代码块来更改样式:

TextInputLayout till= new TextInputLayout(new ContextThemeWrapper(this, 
 R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox));
 EditText et = new EditText(this);
 til.addView(et);
 et.setHint("Enter");
 information.addView(til);

但是这些代码不起作用。如何为我动态创建的 TextInputLayout 添加样式?

ContextThemeWrapper 的第二个参数是主题覆盖,而不是样式。

您可以在 attrs.xml 中定义自定义属性:

<attr name="customTextInputStyle" format="reference" />

然后在您的应用主题中:

<style name="AppTheme" parent="Theme.MaterialComponents.*">
    <!-- ..... -->
    <item name="customTextInputStyle">@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox</item>
</style>

最后:

    TextInputLayout til = new TextInputLayout(this,null,R.attr.customTextInputStyle);
    til.setHint("Label");
    TextInputEditText et = new TextInputEditText(til.getContext());  //important: get the themed context from the TextInputLayout
    til.addView(et);
    buttonsLayout.addView(til);