【问题标题】:android - Enable caps lock (double click shift like) programatically on androidandroid - 在android上以编程方式启用大写锁定(双击shift)
【发布时间】:2017-08-06 03:26:16
【问题描述】:

这个问题与这里已经提出的所有其他问题不同。

问题和疑问

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

我已经在 stackoverflow 中尝试了大多数建议的解决方案,例如 android:inputType="textCapCharacters"setAllCaps(true) 但发生的情况是大写锁定可以不要被禁用。使用上述解决方案,当用户按下 shift 时,用户将插入一个小写字符,然后系统自动将键盘设置回大写锁定。

这不是我想要的正确方式,我只想让用户第一次打开键盘时启用大写,然后他将自己处理大写状态。

注意

请记住,我以“如果我双击(或长按)shift 键”开始问题,因为使用 inputType 解决方案您会遇到这种情况: 如果我手动启用大写锁定,则没有白色大写破折号:

【问题讨论】:

  • 您可以通过设置 edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()}); 以编程方式实现此目的
  • 使用android:inputType="textCapCharacters"查看下面的答案
  • 感谢@ShivanshuVerma 的尝试,但它的行为与 android:inputType="textCapCharacters" 相同:大小写始终位于上方,并且没有机会通过单击 shift 键来降低。

标签: android keyboard uppercase


【解决方案1】:

我已经找到解决问题的方法了!

我必须继续使用 android:inputType="textCapCharacters" 但是当用户按下 shift 键并输入一个小写字符时,文本观察器会删除标志 textCapCharacters.

按照 textwatcher 进行操作:

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

【讨论】:

    猜你喜欢
    • 2012-06-03
    • 2011-12-09
    • 2011-12-19
    • 1970-01-01
    • 2011-05-25
    • 2011-05-31
    • 2012-12-13
    • 2023-04-05
    相关资源
    最近更新 更多