Android软键盘在符号后打开大写锁定

时间:2014-06-20 13:25:45

标签: android

我有一个编辑文本字段。编辑文本已使用不可见符号创建,例如'#' - 隐形符号。当用户单击EditText时,它会在虚拟键盘上显示小写字母。

我希望在隐形符号第一个字母后盖上,其余部分在键盘上小。

如何做到这一点?

2 个答案:

答案 0 :(得分:2)

最后我找到了解决方案。我通过InputType解决了这个问题。这很糟糕,但没有更好的我没找到。 在CustomEditText中,您应该重写方法onSelectionChanged并在那里更改InputType:

public boolean isWasCap = false;// Was capitalisation turn on?

public void onSelectionChanged(int selStart, int selEnd) {
    ...

    setCap();
}

/**
 * Method check is need turn on capitalization
 */
private void setCap(){
    int start = getSelectionStart();
    int end = getSelectionEnd();
    if (start == end && start > 0
            && getText().charAt(start-1) == INVISIBLE_SYMBOL) {
        if(isWasCap) // Capitalization is turn on 
            return;
        setInputMask(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES, InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
        isWasCap = true;
    }else if(isWasCap){
        isWasCap = false;
        setInputMask(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS, InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
    }
}

/**
 * Method replace one input type to other input type
 * @param needRemove - mask which will remove
 * @param needSetup - masr which will setup
 */
public void setInputMask(int needRemove, int needSetup){
    int mask = getInputType() & ~needRemove;
    mask = mask | needSetup;
    setInputType(mask);
}

style.xml

<style name="Common.Editor">

   <item name="android:inputType">textCapSentences|textMultiLine|textAutoCorrect</item>
</style>

main_activity.xml

 <com.view.CustomEditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Common.Editor"
        />

答案 1 :(得分:0)

只需在EditText上设置android:inputType="textCapSentences"即可。

OR

android:inputType="textCapWords"