0

文字列 1 の色 (例: 赤) の母音のみに色を付け、別の母音以外 (例: 青) に色を付けようとしています。しかし、SpannableString setSpan() メソッドは、各文字を反復するときに一貫性がありません。色付けが正しくないことを除いて、ログに記録された出力を確認したように、関数は誓いと非誓いを正しく検出しています。

//ColorLogic.java:
public SpannableString colorString(String myStr)
    {
        SpannableString spnStr=new SpannableString(myStr);
        ForegroundColorSpan vowColor=new ForegroundColorSpan(Color.RED);
        ForegroundColorSpan conColor=new ForegroundColorSpan(Color.BLUE);
        int strLen=myStr.length();
        for(int i=0; i< strLen; i++)
        {
            if (vowSet.contains(Character.toLowerCase(myStr.charAt(i))))
            //if (i%2==0)
            {
                 Log.v(DTAG, "vow"+myStr.charAt(i));
                 spnStr.setSpan(vowColor, i, i, 0);

            }
            else
            {
                Log.v(DTAG, "cons"+myStr.charAt(i));
                spnStr.setSpan(conColor, i, i, 0);
            }
        }
        return spnStr;
    }

    //In my OnCreate of my activity class:
    //PASS
     //Log.v(DTAG, message);
     // Create the text view
     TextView textView = new TextView(this);
     textView.setTextSize(50);

     //Call Color Logic to color each letter individually
     ColorLogic myColorTxt=new ColorLogic();
     SpannableString spnMsg=myColorTxt.colorString(message);
     //Log.v(DTAG, "spnMsg: "+spnMsg.toString());

     textView.setText(spnMsg, BufferType.SPANNABLE);
    //textView.setTextColor(Color.GREEN);
     setContentView(textView);
     }


      ![Vows Only its correct (non-vowels only is correct as well)][1]
          ![With cons and vows, 2 letters then its incorrect!][2]

誓いと誓いを交互に繰り返すのも間違っている

4

1 に答える 1

1

スパン オブジェクトを再利用することはできません。pskink が示すように、呼び出しForegroundColorSpanごとに異なるオブジェクトを使用してくださいsetSpan()

また、使用するスパンを全体的に少なくしたい場合もあります。サンプル (「abibobu」) では可能な限り多くのスパンが必要ですが、ほとんどの単語には子音と母音がつながっています。たとえば、「子音」という単語には、2 つの子音スパン (「ns」と「nt」) が 2 つあります。ForegroundColorSpanこれらは、2 つではなく 1 つの を使用して色付けできるため、レンダリング速度が向上します。スパンは簡単ですが、最速ではないため、使用するスパンが少ないほど、特にアニメーション化された状況 (たとえば、 でのスクロールListView) でアプリのパフォーマンスが向上します。

さらに、ハイフンとアポストロフィの 3 番目の色を計画していない限り、子音または母音のいずれかに色を付けるだけでよい場合があります。覚えておいてください: テキストは色で始めることができます (例: )。android:textColor

于 2013-12-08T17:33:08.450 に答える