自定义TextView只有一个从键盘输入的字符

时间:2013-07-17 17:17:10

标签: android input keyboard textview

好的,我想以某种方式做到以下几点。 在对话框中,我希望用户能够选择一个字母(仅限字母)。他进入后应该可以看到它。如果用户对他的选择不满意,他应该只需点击另一个字母即可。他现在应该看到这封信而不是之前的那封信。

我希望尽可能多地使用标准选项。 我想某种方式自定义TextView只能显示一个当前输入的字符。或者也许某种活动或片段可以拦截来自键盘的输入,然后只是在每个输入编辑带有当前输入字符的textView上。

有人能告诉我怎么做吗?

2 个答案:

答案 0 :(得分:1)

您需要将文本更改的侦听器附加到EditText:

这是一种解决方法:

public class XYZ extends Activity {

String toCompare = "";

....

....

....

yourEditText.addTextChangedListener(new TextWatcher() {

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(final CharSequence s, int start, int before, int count) {

                    if (s.length() > 0 && !toCompare.equals(s.toString())) {
                            toCompare = String.valueOf(s.charAt(s.length() - 1));
                            yourEditText.setText(String.valueOf(s.charAt(s.length() - 1)));
                    }

    }

});

答案 1 :(得分:1)

班级成员

private MyTextWatcher mTextWatcher;
private EditText mEditText;

在适当的位置调用setTextWatcher(),例如在onCreate

public void setTextWatcher()
{
    mTextWatcher = new MyTextWatcher();
    mEditText.addTextChangedListener(mTextWatcher);
}

MyTextWatcher类

public class MyTextWatcher implements TextWatcher
{

    @Override
    public void afterTextChanged(Editable s)
    {

        String text = mEditText.getText().toString();
        if (text.length() > 1)
        {
            mEditText.removeTextChangedListener(mTextWatcher);
            mEditText.setText(text.substring(1));
            Selection.setSelection(mEditText.getText(), 1);
            mEditText.addTextChangedListener(mTextWatcher);
        }
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after)
    {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count)
    {

    }

}