为什么Android在一个带有两个字体的EditText中显示两个光标

时间:2016-04-15 05:34:34

标签: java android android-edittext

我有一个应用程序在一个edittext中显示两种语言[乌尔都语,英语],并且它们都有自己的字体,现在当两种语言都在edittext中编写时,每种语言都会显示两个语言,这似乎是就像一个奇怪的怪癖,虽然它不会打扰文本,但用户可能会感到困惑,就像我关于光标的位置和写入的位置。希望你能得到这个问题。

我不知道为什么会发生这种情况,是否可以删除......

根据此

更改语言

在这里做了一些研究之后找到了答案,首先你必须创建一个自定义键盘View,它扩展了keyboardView,并在其中创建静态键值变量,如

static final int KEYCODE_LANGUAGE_SWITCH_ENG = -102;
static final int KEYCODE_LANGUAGE_SWITCH_URDU = -103;

之后,在已实现inputMethodService的IME类中,在onInitializeInterface覆盖函数内创建键盘。像

mSymbolsKeyboard = new Keyboard(this, R.xml.qwerty2);
mEngQwertyKeyboard = new Keyboard(this, R.xml.eng_qwerty);

之后在onKey覆盖函数中添加这些最终静态键作为switch case,并在相应的情况下设置键盘:

setKeyboard(mEngQwertyKeyboard);

在一个edittext中设置两个字体,如此函数:

public SpannableStringBuilder setWord(String text)
    {
        tokenList = new ArrayList<String>();

        startIndext = 0;
        endIndex = 0;
        isEnglish = false;

        stringBuilder = new SpannableStringBuilder("");

        Log.i("CustomUrduKeyBoard","inside setWord text is: "+text+" stringBuilder: "+stringBuilder);
        if(text == null)
        {

        } else 
        {

            for (int i = 0; i < text.length(); i++) 
            {
//              System.out.println(text.charAt(i) + "-Code:" + (int) text.charAt(i)
//                      + "-" + Integer.toHexString(text.charAt(i)));
                if (text.charAt(i) < 255) 
                {
                    if (!isEnglish) 
                    {
                        endIndex = i;
                        String token = text.substring(startIndext, endIndex);

                        SpannableStringBuilder urduBLD;
                        urduBLD = new SpannableStringBuilder("");
                        urduBLD.append(token);

                        urduBLD.setSpan(new CustomTypefaceSpan("", urduFont),0,urduBLD.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                        stringBuilder.append(urduBLD);
                        tokenList.add(urduBLD.toString());
                        startIndext = endIndex;
                    }
                    isEnglish = true;
                    // english
                    continue;
                } else 
                {
                    if (isEnglish) 
                    {
                        endIndex = i;
                        String token = text.substring(startIndext, endIndex);

                        SpannableStringBuilder engBLD;
                        engBLD = new SpannableStringBuilder("");
                        engBLD.append(token);

                        engBLD.setSpan(new CustomTypefaceSpan("", englishFont),0,engBLD.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                        stringBuilder.append(engBLD);
                        tokenList.add(engBLD.toString());
                        startIndext = endIndex;
                    }
                    isEnglish = false;
                    // urdu
                    continue;
                }
            }

            String token = text.substring(startIndext, text.length());

            for (int i = 0; i < token.length(); i++) 
            {
                if (token.charAt(i) < 255) 
                {

                    SpannableStringBuilder urduBLD;
                    urduBLD = new SpannableStringBuilder("");
                    urduBLD.append(token);

                    urduBLD.setSpan(new CustomTypefaceSpan("", englishFont),0,urduBLD.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                    stringBuilder.append(urduBLD);
                    tokenList.add(urduBLD.toString());

                    break;
                } else
                {

                    SpannableStringBuilder engBLD;
                    engBLD = new SpannableStringBuilder("");
                    engBLD.append(token);

                    engBLD.setSpan(new CustomTypefaceSpan("", urduFont),0,engBLD.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                    stringBuilder.append(engBLD);
                    tokenList.add(engBLD.toString());

                    break;
                }
            }

        }

        return stringBuilder;
    }

0 个答案:

没有答案