2016-08-02 58 views
0

我希望键盘在键入特定字符后自动转到“大写模式”。即我想让键盘按下“shift”按钮,并在输入开括号'('或闭括号')'后大写下一个字母。特定字符后自动打开大写锁定?

我想这个作用在键盘上,并为用户提供一个选项,让他们不必大写一个字母。我不想在文本显示在editText中之前自动大写文本,因为我希望用户可以选择不使下一个字母大写。

+0

除非你写的键盘应用程序,我敢肯定你不能。然而,您可以将'TextWatcher'附加到您的编辑文本并手动修改输入的字符。 –

回答

1

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

  1. 设置一个setKeyListener
  2. 如果条件为,则插入一个,其中您检查输入的字符是否等于您的特定字符
  3. 使用大写TYPE_TEXT_FLAG_CAP_CHARACTERS你的性格。

我下面连接,你可能会发现一些有用的文档。

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

我相信这会大写所有字符。我在按下开放式支架后想要让键盘按下“shift”按钮。所以默认情况下,下一个字母将是大写字母,但如果用户再次点击了转换按钮,则下一个字母不会是大写字母。 – ClownsENT

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

将利用指定的键后, ŝ

相关问题