android - 在android上以编程方式启用大写锁定(双击移动)

时间:2017-03-15 11:50:38

标签: android keyboard uppercase

此问题与此处已经提到的所有其他问题不同。

问题&问题

我希望大写锁定启用,就像打开键盘时双击(或长按)shift键一样。 另一个要求是,如果用户按下shift键,则必须禁用大写锁定。

我已经在stackoverflow中尝试过大多数提议的解决方案,例如 android:inputType =“textCapCharacters” setAllCaps(true)但是会发生的事情是大写锁定可以禁用。使用上述解决方案,按下shift后,用户将以小写形式插入一个单个字符,然后系统自动将键盘设置为大写锁定。

这不是我想要的正确方法,我只希望在用户第一次打开keybaoard时启用大写字母,然后他将自己处理大写状态。

注意

请记住,我开始提问“就像我双击(或长按)shift键”,因为使用inputType解决方案你有这种情况: CMD 如果我手动启用大写锁定,那就没有白色大写字样突破: enter image description here

1 个答案:

答案 0 :(得分:-1)

我找到了问题的解决方案!

我必须继续使用 android:inputType =“textCapCharacters”但是当用户按下shift键并输入小写的单个字符时,textwatcher会删除标记 textCapCharacters

按照文字执行者的说法:

public class EditTextWatcher  implements  TextWatcher{

    private EditText editText;

    public PtlEditTextWatcher(EditText editText) {
        this.editText = editText;
    }

    @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 (editText != null && s.length() > 0 && (editText.getInputType() & InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS) > 0)
            if (Character.isLowerCase(s.toString().charAt(s.length() - 1)))
                editText.setInputType(editText.getInputType() & ~InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
    }
}

简单使用它是:

addTextChangedListener(new EditTextWatcher(myEditText));