将格式化文本添加到EditText视图

3

我有一个EditText视图,我用它来向用户显示信息。 我可以通过以下方法正确地附加字符串:

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

这个应用是一个RPG游戏,其中有战斗,当用户在战斗时,我希望显示的字符串是红色的。因此,我尝试使用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. 只有最后一行格式化为红色。如果设定新行为红色,则由于我检索文本的方式,将丢失先前的格式。

    String CurrentText = MAIN_DISPLAY.getText().toString();

  2. 当我仅将字符串附加到EditText时,它会显示EditText框的底部(最后一个输入),现在使用SetText时用户看到顶部。

最后我的问题:

有没有一种方法可以追加格式化的文本?

或者...我可以从EditText中检索格式化的文本,然后当我使用.setText时保留当前格式吗?

如果可以的话...有没有一种方法将显示焦点设置在底部而不是顶部?

谢谢!如果需要额外的信息,请评论,我已经卡了一段时间了。

3个回答

2

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

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

myString可以是以下格式之一:

String myString = "Hello <font color=\'#ff0000\'>World</font>";

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

谢谢,这正是我在寻找的,完美地运作。一旦你知道答案,它总是看起来很简单!再次感谢。 - Jake Graham Arnold

0

尝试进行更改

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

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

这将会把所有的文本变成红色,但我希望有些文本是黑色的...然后有些是红色、绿色、蓝色等(根据输出)。但还是感谢你的回答。 - Jake Graham Arnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接