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");
        }
    });