2013-01-11 190 views
2

我想在TextView中設置整行的背景顏色,而不一定是文本覆蓋的行的部分(我可以使用Span )。Android TextView:如何在TextView中設置整行的背景顏色

E.g.如果說第0行,可以容納25個字符,但只有12個字符。如果我說

SpannableString s = new SpannableString("abcdefghijkl"); 
s.setSpan(new BackgroundColorSpan(0xffffffff), 0, 11, Spanned.SPAN_INCLUSIVE_INCLUSIVE); 
TextView t = new TextView(); 
t.setText(s); 

這會設置一半線條的背景顏色。 但我想要整行(TextView的整個寬度)填充背景顏色。另外,我希望只發生一行,而不是整個TextView背景。

任何想法如何實現?

+0

檢查:http://stackoverflow.com/questions/8105545/can-i-select-a-color-for-each-text-line-i-append-to-a-textview – EvZ

+0

沒有這將僅設置具有文本的行的部分的背景。我希望整條線(甚至是空白空間)具有相同的背景顏色。 –

+0

我認爲你應該改變11 s.length(),你將有你的字符串的總長度,並設置其背景 – Reda

回答

-1

的TextView(就像所有其他的Android設備上查看)有setBackgroundColor

t.setBackgroundColor(0xffffffff); 
+0

但是這會設置整個TextView的背景顏色。我只需要設置一行的背景顏色。 –

+0

哦...所以使用@dokkaebi答案! – Budius

+0

是的,dokkaebi的答案似乎是我可以用於我的要求的最合適的答案。我會探索這個。感謝你和@dokkaebi。 –

0

裹在RelativeLayout的你的TextView,並把它在其他視圖的方法:

<RelativeLayout 
    android:id="@+id/container" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    > 
    <View android:id="@+id/bgcolor" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:background="@color/whatever" 
     /> 
    <TextView android:id="@+id/textview" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 
</RelativeLayout> 

現在,在全球佈局,找到TextView的一行高度,並將bgcolor視圖設置爲該高度:

final TextView textView = (TextView) findViewById(R.id.textview); 
final ViewTreeObserver vto = textView.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    public void onGlobalLayout() { 
     int lineHeight = textView.getLineHeight(); 
     // May need to also getLineSpacingExtra, etc. not sure. 
     View bgColor = findViewById(R.id.bgcolor); 
     RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) 
       bgColor.getLayoutParams(); 
     lp.height = lineHeight; 
     bgColor.setLayoutParams(lp); 
     // May or may not want to remove the listener: 
     vto.removeGlobalOnLayoutListener(this); 
    } 
} 
+0

是的,這看起來像是一個解決方案。但我需要設置多於一行背景顏色。而且,如果用戶滾動瀏覽線路怎麼辦?背景顏色視圖如何移動? –

+0

哦,你想突出一個特定的線? – dokkaebi

+0

在這種情況下,我想我會去用一個ListView,並根據其寬度將文本分成幾行。然後你可以免費獲得線條突出顯示。 – dokkaebi

0

您的目標是使用垂直方向的LineaLayout,
將TextView作爲「可着色線條」。

1)創建一個擴展LinearLayout的類。
2)編寫基本功能添加「着色線」,「畫它」& e.t.c.
3)在佈局XML中使用您的視圖。

+0

謝謝,儘管dokkaebi的回答看起來最合適,並且對我來說最容易實現我所需要的東西,但是謝謝你提供了關於如何創建我自己的觀點的想法。這會有所幫助。謝謝。 –

1
TextView name = (TextView) findViewById(R.id.name); 
    String iName = "YOYOYOYO"; 

    ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(184, 184, 
      184)); 

    SpannableString ssb = new SpannableString(iName); 
    ssb.setSpan(fcs, 0, iName.length(), 
      Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    name.setText(ssb);