2016-04-11 11 views
0

Dies mag ein bisschen fischig klingen, aber auch ich weiß nicht, ob dies in Android möglich ist oder nicht. Die Anforderung ist, dass ich zwei Sprachen in den Editiertext schreiben muss, ein Urdu und das andere ist Standard Englisch, jetzt ist das Problem in der Schriftart, da ich die Urdu Schriftart als Standard verwenden muss, habe ich setTypeface wie folgt verwendet:Android: Verwenden Sie zwei benutzerdefinierte Schriftarten für einen EditText

editText.setTypeface(englishFont); 

aber das Problem ist, das Englisch in dieser Schrift ist nicht gut, in der Tat ist es kleiner als üblich für diese ich eine andere Schrift für Englisch verwenden, aber das schafft das Problem, ich die getText vom editText erhalten erkennen, die Urdu und Englisch Zeichen und dann spannableStringBuilder verwenden, um die Schriftart entsprechend wie folgt zu ändern:

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


       } 

B Damit wird das Problem nicht gelöst, der Text in editText bleibt gleich, keine Änderung in der Schrift. Ist das möglich oder nicht?

+1

als warum nicht Sie zwei eidtText eine für urdhu und andere für Englisch @blogger –

+0

vielleicht hilft: http://stackoverflow.com/questions/9618835/apply-two-different-font-styles-to-a-textview – Opiatefuchs

+0

Da in der Aktivität nur ein EditText erforderlich ist, sollten beide Sprachen im selben EditText –

Antwort

0

Nach einigen Recherchen und harte Arbeit endlich tun konnte ich eine universelle Funktion für diese erstellen:

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