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 获得焦点时,提示像默认一样移动到顶部。
提前致谢!
您必须将 id
和 hint
添加到您的 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()。
我想制作一个自定义对话框,我可以重新使用它来配置一些参数。我添加了一个默认提示,每次用户打开对话框时我都想修改它。
<?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 获得焦点时,提示像默认一样移动到顶部。
提前致谢!
您必须将 id
和 hint
添加到您的 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()。