使用TextInputLayout时更改EditText textAllCaps

时间:2018-05-02 16:54:07

标签: android

我正在使用设计库中的新TextInputLayout。我可以让它显示并更改浮动标签的颜色。不幸的是,它不会将文本更改为大写。

我不想更改我的strings.xml ,因为我只希望这个标签是大写的。我尝试在布局,样式和编程方式中更改textAllCaps,但EditText提示的情况总是与strings.xml完全一致。

这是我的TextInputLayout和EditText的XML

<android.support.design.widget.TextInputLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android.support.design:hintTextAppearance="@style/TextInputLayout">


<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/city"
    android:textColorHint="@color/black"
    android:hint="@string/city" />

</android.support.design.widget.TextInputLayout>

这是我用于TextInputLayout的样式(我尝试使用唯一的“textAllCaps”(没有“android:”)属性,但没有为我做任何事情):

<style name="TextInputLayout" parent="@android:style/TextAppearance">
 <item name="android:textAllCaps">true</item>
</style>

2 个答案:

答案 0 :(得分:1)

该解决方案与@Janvi几乎相同,但是由BindingAdapter解决,该适配器可以在xml中代替代码使用:

@BindingAdapter("android:hint")
fun setTextInputLayoutHint(textInputLayout: TextInputLayout, hint: CharSequence?) {
    textInputLayout.hint = hint?.toString()?.toUpperCase()
}

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/til_first_name"
        android:hint="@{@string/first_name}"

enter image description here

PS:

  

提示应该在TextInputLayout上设置,而不是在TextInputEditText或EditText上设置。   https://material.io/develop/android/components/text-input-layout/

答案 1 :(得分:-1)

当我们使用TextInputLayout时,editext和TextInputLayout的提示都是相同的。

在.xml中删除编辑文档中的android:hint="@string/city",因为我们以编程方式设置提示,此处将ID添加到TextInputLayout

显示如下: -

<android.support.design.widget.TextInputLayout
 android:id="@+id/tlName"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android.support.design:hintTextAppearance="@style/TextInputLayout">


<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/city"
    android:textColorHint="@color/black />

</android.support.design.widget.TextInputLayout>
  

在你的java文件中,

 TextInputLayout tlName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tlName =(TextInputLayout) findViewById(R.id.tlName);

         tlName.setHint(getResources().getString(R.string.city).toUpperCase());
    }

显示截图: -

enter image description here