在特定字符后自动锁定大写字母?

时间:2016-08-02 21:38:47

标签: android

我希望键盘在键入特定字符后自动进入“大写模式”。即我希望键盘按下“shift”按钮,并在键入一个开括号'('或close bracket')后大写下一个字母。

我想让它在键盘上操作并成为用户的选项,这样他们就不必将下一个字母大写。我不希望在文本出现在editText之前自动大写文本,因为我希望用户可以选择不大写下一个字母。

2 个答案:

答案 0 :(得分:1)

这可以在您的代码库中以编程方式完成。

  1. 设置 setKeyListener
  2. 插入 if条件,检查输入的字符是否等于特定字符
  3. 使用 TYPE_TEXT_FLAG_CAP_CHARACTERS 对您的角色进行大写。
  4. 我附上了一些您可能觉得有用的文档。

    1. https://developer.android.com/reference/android/text/InputType.html
    2. https://developer.android.com/reference/android/text/InputFilter.AllCaps.html

答案 1 :(得分:0)

这样的事情可能有用:

public class CapitalizedEditText extends EditText {
    List<Integer> mKeyCodes = new ArrayList<>();

    public CapitalizedEditText(Context context) {
        super(context);
    }

    public void capitalizeAfter(int... keyCodes) {
        for(int keyCode : keyCodes) {
            mKeyCodes.add(keyCode);
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        setFilters(getInputFilter(keyCode));
        return super.onKeyDown(keyCode, event);
    }

    private InputFilter[] getInputFilter(int keyCode) {
        return mKeyCodes.contains(keyCode)
                ? new InputFilter[]{new InputFilter.AllCaps()}
                : new InputFilter[] {};
    }
}

示例:

((CapitalizedEditText) findViewById(R.id.editid))
                        .capitalizeAfter(KeyEvent.KEYCODE_BUTTON_A,
                                KeyEvent.KEYCODE_LEFT_BRACKET,
                                KeyEvent.KEYCODE_LEFT_BRACKET);

将在指定的键

之后大写