3

ユーザーに情報を表示するために使用している EditText ビューがあります。私は文字列を追加することができ、次の方法で正しく動作します:

      public void PrintToUser(String text){
         MAIN_DISPLAY.append("\n"+text);
      }

アプリケーションは戦闘のある RPG ゲームで、ユーザーが戦っているときに文字列を RED で表示したいと考えています。だから私は SpannableString を使用しようとしました。(方法を変更しました)

       public void PrintToUser(String text, int Colour){
    
       if(Colour == 0){
       //Normal(Black) Text is appended
       MAIN_DISPLAY.append("\n"+text);
        
        
       }else{
       //Colour text needs to be set.
    

       //Take the CurrentText
       String CurrentText = MAIN_DISPLAY.getText().toString();
       CurrentText = CurrentText+"\n";
        
       SpannableString SpannableText = new SpannableString(CurrentText + text);  
    
       switch(Colour){
       case 1:
              SpannableText.setSpan(new ForegroundColorSpan(Color.RED), CurrentText.length(), SpannableText.length(), 0); 
       break;
       }
    

     //You cannot append the Spannable text (if you do you lose the colour)
    MAIN_DISPLAY.setText(SpannableText, BufferType.SPANNABLE);
    }

この新しい方法が機能し、新しい行が赤で表示されます。

問題

  1. フォーマットされた最後の行だけが赤です。新しい行が赤に設定されている場合、テキストを取得する方法が原因で、以前の書式設定が失われます

    文字列 CurrentText = MAIN_DISPLAY.getText().toString();

  2. EditText に文字列のみを追加していたときは、SetText を使用すると、EditText ボックスの下部 (最後の入力) が表示されていました。ユーザーには上部が表示されます。

最後に私の質問:

書式設定されたテキストを追加する方法はありますか?

または... EditText から書式設定されたテキストを取得し、.setText を使用すると現在の書式を維持できますか?

もしそうなら...上部ではなく下部にディスプレイを集中させる方法はありますか?

ありがとうございました!追加情報が必要な場合はコメントしてください。私はしばらくこれに固執しています。

4

3 に答える 3

1

次の変更は機能するPrintToUser()はずです..

public void PrintToUser(String text, int Colour){
    ...
    ...
    Editable CurrentText = MAIN_DISPLAY.getText();
    int oldLength = CurrentText.length();
    CurrentText.append("\n" + text); 

    switch(Colour){
       case 1:
         CurrentText.setSpan(new ForegroundColorSpan(Color.RED), 
                             oldLength, CurrentText.length(), 0); 
       break;
    }
}
于 2012-07-19T18:16:55.643 に答える
0

変更してみる

SpannableText.setSpan(new ForegroundColorSpan(Color.RED), CurrentText.length(), SpannableText.length(), 0);

の上

SpannableText.setSpan(new ForegroundColorSpan(Color.RED), 0, SpannableText.length(), 0);
于 2012-07-19T14:51:42.830 に答える