使用设计支持库时 EditText getHint() returns null
EditText getHint() returns null when using design support library
将 EditText 与设计库(版本 22.2.1)TextInputLayout 结合使用时,以编程方式获取提示 returns null。
我试图以编程方式将星号“*”附加到必填字段,因此 EditText.getHint()
但它 returns null 的事实在这种情况下是一个问题。
EditText editText = (EditText) findViewById(R.id.edit2);
String hint = String.format("%s *", editText.getHint());
editText.setHint(hint);
一个简单的代码说明:
Layout.xml:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edit2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hello_world"
android:inputType="text"/>
</android.support.design.widget.TextInputLayout>
Java:
EditText editText = (EditText) findViewById(R.id.edit2);
if (editText.getHint() == null) throw new AssertionError("Hint should not be null");
依赖:编译'com.android.support:design:22.2.1'
之前的相关问题 !
这在设计支持 23.0.0
中已修复,但项目必须针对 api 23
进行编译。
build.gradle
android {
compileSdkVersion 23
buildToolsVersion '23'
....
}
dependencies{
compile 'com.android.support:appcompat-v7:23.0.0'
...
}
像以前一样在 EditText
上设置提示:
<android.support.design.widget.TextInputLayout
android:id="@+id/inputField"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hello_world"
android:inputType="text"/>
现在向提示添加一个额外的字符:
TextInputLayout inputField = (TextInputLayout) findViewById(R.id.inputLayout);
String hint = String.format("%s *", inputField.getHint());
inputField.setHint(hint);
实际上,提示移动到 EditText
视图周围的父视图 TextInputLayout
:
你可以得到这样的提示:
android.support.design.widget.TextInputLayout parent = (android.support.design.widget.TextInputLayout) yourEditText.getParent();
String hint = parent.getHint().toString();
如果你想添加 *
就这样:
parent.setHint(parent.getHint() + "*");
编码愉快! :)
提示与其父布局相关联
((TextInputLayout)view.getParent()).getHint()
只是您需要定位 TextInputLayout
而不是 EditText
,我正在使用 Material Design
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputLayoutFirstName"
...>
<androidx.appcompat.widget.AppCompatEditText
...
android:hint="First Name"/>
</com.google.android.material.textfield.TextInputLayout>
所以基本上改变提示尝试:
inputLayoutFirstName.apply {
hint = hint.toString().plus("*")
}
您还可以使用此扩展名:
private fun TextInputLayout.addRequiredSymbolHint() {
hint = hint.toString().plus("*")
}
将 EditText 与设计库(版本 22.2.1)TextInputLayout 结合使用时,以编程方式获取提示 returns null。
我试图以编程方式将星号“*”附加到必填字段,因此 EditText.getHint()
但它 returns null 的事实在这种情况下是一个问题。
EditText editText = (EditText) findViewById(R.id.edit2);
String hint = String.format("%s *", editText.getHint());
editText.setHint(hint);
一个简单的代码说明: Layout.xml:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edit2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hello_world"
android:inputType="text"/>
</android.support.design.widget.TextInputLayout>
Java:
EditText editText = (EditText) findViewById(R.id.edit2);
if (editText.getHint() == null) throw new AssertionError("Hint should not be null");
依赖:编译'com.android.support:design:22.2.1'
之前的相关问题
这在设计支持 23.0.0
中已修复,但项目必须针对 api 23
进行编译。
build.gradle
android {
compileSdkVersion 23
buildToolsVersion '23'
....
}
dependencies{
compile 'com.android.support:appcompat-v7:23.0.0'
...
}
像以前一样在 EditText
上设置提示:
<android.support.design.widget.TextInputLayout
android:id="@+id/inputField"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hello_world"
android:inputType="text"/>
现在向提示添加一个额外的字符:
TextInputLayout inputField = (TextInputLayout) findViewById(R.id.inputLayout);
String hint = String.format("%s *", inputField.getHint());
inputField.setHint(hint);
实际上,提示移动到 EditText
视图周围的父视图 TextInputLayout
:
你可以得到这样的提示:
android.support.design.widget.TextInputLayout parent = (android.support.design.widget.TextInputLayout) yourEditText.getParent();
String hint = parent.getHint().toString();
如果你想添加 *
就这样:
parent.setHint(parent.getHint() + "*");
编码愉快! :)
提示与其父布局相关联
((TextInputLayout)view.getParent()).getHint()
只是您需要定位 TextInputLayout
而不是 EditText
,我正在使用 Material Design
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputLayoutFirstName"
...>
<androidx.appcompat.widget.AppCompatEditText
...
android:hint="First Name"/>
</com.google.android.material.textfield.TextInputLayout>
所以基本上改变提示尝试:
inputLayoutFirstName.apply {
hint = hint.toString().plus("*")
}
您还可以使用此扩展名:
private fun TextInputLayout.addRequiredSymbolHint() {
hint = hint.toString().plus("*")
}