Android 在 TextInputEditText 上添加提示时出现问题

Android Problem adding hint on a TextInputEditText

我想制作一个自定义对话框,我可以重新使用它来配置一些参数。我添加了一个默认提示,每次用户打开对话框时我都想修改它。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/space_default">
    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/etValue"
            android:layout_width="match_parent"
            android:hint="default"
            android:layout_height="wrap_content"/>
    </com.google.android.material.textfield.TextInputLayout>
</LinearLayout>

当我以编程方式设置提示时,未修改默认提示并添加了第二个提示。

binding.clDireccion.setOnClickListener {
    val dialogView = layoutInflater.inflate(R.layout.dialog_configuration, null)
    val valueEditText = dialogView.findViewById<TextInputEditText>(R.id.etValue)
    
    valueEditText.setHint("Direccion")
    
    MaterialAlertDialogBuilder(this)
        .setView(dialogView)
        .setCancelable(false)
        .setPositiveButton("Modificar") { dialogInterface, i ->
            val textValue = valueEditText.text.toString()
            with(preference.edit()) {
                putString(getString(R.string.sp_direccion), textValue).apply()
            }
        }
        .setNegativeButton("Cancelar", null)
        .show();
}

这是结果:

我的预期结果是修改默认提示,我还希望当 EditText 获得焦点时,提示像默认一样移动到顶部。

提前致谢!

您必须将 idhint 添加到您的 TextInputlayout:

<com.google.android.material.textfield.TextInputLayout
    ...
    android:id="@+id/til_value"
    android:hint="@string/default">

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

然后在代码中更改 hint of TextInputlayout(示例中使用 View Binding):

binding.tilValue.hint = "Some new hint"

由于 TextInputLayout 的文档:

提示应设置在 TextInputLayout 上,而不是 EditText 上。如果在 XML 中的子 EditText 上指定了提示,TextInputLayout 可能仍然可以正常工作; TextInputLayout 将使用 EditText 的提示作为其浮动标签。但是,将来修改提示的调用不会更新 TextInputLayout 的提示。为避免意外行为,请在 TextInputLayout 而不是 EditText 上调用 setHint(CharSequence) 和 getHint()。