【问题标题】:Android: Use two Custom Fonts for one EditTextAndroid:一个EditText使用两个自定义字体
【发布时间】:2016-08-01 06:10:26
【问题描述】:

这听起来可能有点可疑,但是,即使我不知道这在 android 中是否可行。要求是我需要在edittext中编写两种语言,一种是urdu,另一种是默认英语,现在问题出在字体上,因为我必须使用urdu字体作为默认字体,我使用setTypeface如下:

editText.setTypeface(englishFont);

但问题是这个字体的英文不好,实际上它比平时小,我必须使用另一种英文字体,但这会产生问题,我从editText获取getText,检测到urdu 和英文字符,然后使用 spannableStringBuilder 相应地更改字体如下:

if(Arrays.asList(urduCodes).contains(Integer.toHexString(text.charAt(i)).toUpperCase()))
                {
                    System.out.println("different: "+text.charAt(i));
                    SpannableStringBuilder urduBLD;
                    urduBLD = new SpannableStringBuilder("");
                    urduBLD.append(edi.getText().charAt(i));
                    System.out.println("urduBLD: "+urduBLD);
                    urduBLD.setSpan(new StyleSpan(urduFont.getStyle()),urduBLD.length(),urduBLD.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                    stringBuilder.append(urduBLD);



                } else 
                {
                    System.out.println(text.charAt(i)+"-Code:"+(int)text.charAt(i)+"-"+Integer.toHexString(text.charAt(i)));
                    SpannableStringBuilder engBLD;
                    engBLD = new SpannableStringBuilder("");
                    engBLD.append(edi.getText().charAt(i));
                    System.out.println("engBLD: "+engBLD);
                    engBLD.setSpan(new StyleSpan(englishFont.getStyle()),engBLD.length(),engBLD.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                    stringBuilder.append(engBLD);


                }

但这并没有解决问题,editText中的文字保持不变,字体没有变化。这可能吗??

【问题讨论】:

  • 为什么不使用两个 eidtText 一个用于 urdhu 另一个用于英语@blogger
  • 因为在活动中只需要一个 EditText 并且两种语言都应该在同一个 EditText 中
  • @Opiatefuchs 这是正确/正确的 TextView 而不是 EditText,我已经测试过了...

标签: java android mobile fonts typeface


【解决方案1】:

经过一些研究和努力,我终于能够为此创建一个通用函数:

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

【讨论】:

    猜你喜欢
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    相关资源
    最近更新 更多