2011-11-12 19 views
4

私はBluetooth接続コンソールとして使用するTextViewを持っています。私がコマンドを送るとき、それは色(例えばシアン)で書かれ、答えは異なる色(例えば赤)で受け取られることを望みます。TextViewに追加するテキスト行ごとに色を選択できますか?

そうすることは可能でしょうか?もしそうなら、どうすればよいですか?

私はHTMLを使用する可能性がありますが、私はそれが最良のアプローチであるか、それを行う方法さえよく分かりません。

+0

http://stackoverflow.com/questions/22939862/textview-with-background-color-and-line-spacing/30096905#30096905 – qw1nz

答えて

7

本当にTextViewにする必要がありますか?ListViewを代わりに使用し、各コマンド/応答のリストに新しい行を追加できますか?

あなた本当には(これは、あなただけコピーして試して、あなたのアプリケーションに貼り付けることができ実施例である)あなたはこのような何かを行うことができますのTextViewを使用する場合:

package com.c0deattack; 

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.text.Spannable; 
import android.text.style.ForegroundColorSpan; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class MultipleColoursInOneTextViewActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     TextView tv = new TextView(this); 

     String command = "This is a command"; 
     String response = "\nThis is a response"; 

     tv.append(command + response); 
     Spannable spannableText = (Spannable) tv.getText(); 
     spannableText.setSpan(new ForegroundColorSpan(Color.GREEN), 0, command.length(), 0); 
     spannableText.setSpan(new ForegroundColorSpan(Color.RED), command.length(), command.length() + response.length(), 0); 

     LinearLayout layout = new LinearLayout(this); 
     layout.addView(tv); 
     setContentView(layout); 
    } 
} 

表示されるようにできることはありますが、それぞれのコマンド/アンサーが開始して終了する箇所で自分自身と行間を設定しなければならないことに気付くはずです。正しい色を適用することができます。それは難しいことではありませんが、私にとっては、不器用な感じです。ここで

+0

コンソール端末のように見えるのでTextViewを使いたいと思っていました。 ListViewは2行の間に水平線を持つので、そのようには見えません。あなたがそれらの行を避ける方法を知っているなら、それは私のために働くことができます。どのように知っているかを説明してください。 –

+0

私の答えが更新されました。「編集」に警告が出るかどうかわかりません – C0deAttack

+0

完全に動作しています:) –

-3

すべての状態を確認してください。 textView.setTextColor(Color.RED);

+0

を見てみると、書かれたテキスト(txとrxの両方)私が贈っている色に? –

+1

私はそれもそうだと思います。この解決策はまったく満足のいくものではありません。 – AsTeR

16

はちょうどあなたが使用している場合それはeasyerだ

appendColoredText(textView, "Text", Color.RED); 
+0

colorパラメータの代わりにPrebuild ForegroundColorSpanオブジェクトが渡された場合、このソリューションが機能しなくなった理由を教えてください。ありがとう – MadBlack

0

textView.append("Text") 

への呼び出しを置き換えるもの

​​

を簡素化C0deAttackの回答に基づいて、小さなヘルパー関数です:

textView.append(Html.fromHtml("<font color='#FFFFFF'</font>")); 
関連する問題