Java 更改文本输入布局';s提示值,用户在其中键入
这是我的Java 更改文本输入布局';s提示值,用户在其中键入,java,android,Java,Android,这是我的textinputtext内部TextInputLayout。您可以看到的提示设置在TextInputLayout上 用户必须写入255个字符,否则帖子无效 我希望数字255随着用户键入而减少,当达到0时,提示应该为空 这是我的密码: private int charactersLeft=256在onCreate方法之外声明 此代码位于onCreate方法中: final TextInputLayout postTextInputBase = findViewById(R.id.post
textinputtext
内部TextInputLayout
。您可以看到的提示设置在TextInputLayout
上
用户必须写入255个字符,否则帖子无效
我希望数字255随着用户键入而减少,当达到0时,提示应该为空
这是我的密码:
private int charactersLeft=256
在onCreate
方法之外声明
此代码位于onCreate
方法中:
final TextInputLayout postTextInputBase = findViewById(R.id.post_text_input_base);
final TextInputEditText postTextInput = findViewById(R.id.post_text_input);
postTextInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (charactersLeft == 0) {
postTextInputBase.setHint(null);
} else {
postTextInputBase.setHint((charactersLeft - 1) + " characters left");
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
我还尝试将charactersLeft
设置为characterLeft-=1
,但是java
不允许我这样做
那么,我该怎么做呢?使用
- 是否在此布局中启用字符计数器功能
- 设置要在字符计数器上显示的最大长度
<android.support.design.widget.TextInputLayout
android:id="@+id/post_text_input_base"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:counterEnabled="true"
app:counterMaxLength="250">
<EditText
android:id="@+id/post_text_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="UserName" />
</android.support.design.widget.TextInputLayout>
输出
注意不要忘记在edittext中设置android:maxLength=“10”
您可以使用编辑文本上的
setOnKeyListener
以编程方式执行此操作
TextInputLayout postTextInputBase = findViewById(R.id.post_text_input_base);
TextInputEditText postTextInput = findViewById(R.id.post_text_input);
postTextInput.setOnKeyListener((v, keyCode, event) -> {
// Do other things needed
postTextInputBase.setHint("Characters left: " + (256 - postTextInput.getText().length()));
return false;
});
试试这个。使用现有代码
int charactersLeft = 256;
final TextInputLayout postTextInputBase = findViewById(R.id.post_text_input_base);
final TextInputEditText postTextInput = findViewById(R.id.post_text_input);
postTextInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() == 0) {
postTextInputBase.setHint(null);
}else {
postTextInputBase.setHint((charactersLeft - s.length()) + " characters left");
}
}
});
并将
android:maxLength=“256”
添加到您的文本输入文本中
要更改提示文本,只需更改焦点即可
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
editText.setHint("Enter name");
else
editText.setHint("Name");
}
});
如果您检查TextInputLayout类,已经有一个计数器字段,如果您设置setCounterEnabled(true)以防您想显示计数器,那么它将可见@Dr.aNdRo,非常感谢您,它成功了!但我想做的是也显示“左字符”。你可以添加一个文本视图,手动计算编辑文本字符的数量,并从文本监视器更新该文本视图。这不足以满足他的用户界面。他想在欣特向你们展示柜台,非常感谢@Nilesh Rathod,这很有效!但我想做的是也显示“左字符”。@InterbeddedDeveloper请稍等,我将更新我的答案确定,@NileshRathodYou正在重新使用错误字段:D,是的,如果对他有效,这可能是一种方法简单但优雅的解决方案:)最简单的解决方案,可以与我现有的代码一起工作!非常感谢@Anisuzaman Babla!谢谢你@Tosin John!这也行!我对你的答案投了赞成票。
int charactersLeft = 256;
final TextInputLayout postTextInputBase = findViewById(R.id.post_text_input_base);
final TextInputEditText postTextInput = findViewById(R.id.post_text_input);
postTextInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() == 0) {
postTextInputBase.setHint(null);
}else {
postTextInputBase.setHint((charactersLeft - s.length()) + " characters left");
}
}
});
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
editText.setHint("Enter name");
else
editText.setHint("Name");
}
});