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

2

我的建议是使用以下方法:

myTextView.setText(Hmtl.fromHtml(myString));

myString 可以是以下格式:

String myString = "Hello <font color=\'#ff0000\'>World</font>";
于 2012-07-19T15:03:27.237 回答
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 回答