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

时间:2012-07-17 11:03:15

标签: java android android-edittext

我有一个EditText视图,用于向用户显示信息。我能够附加一个字符串,它可以使用以下方法正常工作:

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

该应用程序是一个RPG游戏,有战斗,当用户正在战斗时,我想在RED中显示String。所以我试图使用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时,用户看到的是Top。

  3. 最后我的问题:

    有没有办法附加格式化文本?

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

    如果是这样...... 有没有办法将显示屏聚焦在与顶部相对的底部?

    谢谢!请评论是否需要其他信息我已经坚持了一段时间。

3 个答案:

答案 0 :(得分:2)

我的建议是使用方法:

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

myString的格式可以是:

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

答案 1 :(得分: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;
    }
}

答案 2 :(得分:0)

尝试更改

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

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