2012-06-26 24 views
0

爲參照agradient到TextView的方面爲正常動作可以在機器人來實現,多個梯度爲單一的TextView

如下:

android:background="@drawable/gredient" 

和梯度XML將如下代碼:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
    <gradient android:startColor="#B22222" android:centerColor="#000000" 
      android:endColor="#B22222" android:angle="0" /> 
    <corners android:radius="15dp" /> 
</shape> 

什麼即時通訊問約是有在Android到申請多個漸變單個文本視圖可能包含段落,所以每個段落都會有不同的漸變。

任何意見可以理解,

感謝

+0

我認爲你可以使用層列表這裏 – Akram

+0

@Akki會你請p ost示例代碼,以及如何我可以爲每個gradien的每個段落劃分感謝 –

+0

typo:gr_e_dient –

回答

0

你可能要考慮使用的WebView代替TextView(如果你需要更先進的格式),但如果你想堅持一個TextView,LineBackgroundSpan是你的朋友:)

雖然可能有一些更好的解決方案(最有可能涉及一個自定義Layout派生類),這裏的一些示例代碼,應該做你想做的只是通過實施特殊LineBackgroundSpan接口:

public class MyActivity extends Activity { 

    private Editable mEditable; 

    private class MySpan implements LineBackgroundSpan { 
     private final Rect rect = new Rect(); 
     private final Drawable drawable; 
     private int next = 0; 

     public MySpan(Drawable drawable) { 
      this.drawable = drawable; 
     } 

     @Override 
     public void drawBackground(Canvas c, Paint p, int left, int right, int top, int baseline, 
       int bottom, CharSequence text, int start, int end, int lnum) { 
      if (start == end) return; 
      if (next == 0) { 
       next = mEditable.nextSpanTransition(start, Integer.MAX_VALUE, MySpan.class); 
       rect.left = left; 
       rect.top = top; 
      } 
      if (next == end) { 
       rect.right = right; 
       rect.bottom = bottom; 
       c.save(); 
       drawable.setBounds(rect); 
       drawable.draw(c); 
       c.restore(); 
      } 
     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     final Resources res = getResources(); 
     final Drawable gd1 = res.getDrawable(R.drawable.gd1); 
     final Drawable gd2 = res.getDrawable(R.drawable.gd2); 
     final Drawable gd3 = res.getDrawable(R.drawable.gd3); 
     final Drawable gd4 = res.getDrawable(R.drawable.gd4); 

     final TextView tv = new TextView(this); 
     setContentView(tv); 

     tv.setText("Paragraphs with drawable background:\n", BufferType.EDITABLE); 
     mEditable = tv.getEditableText(); 

     final String text = "paragraph text "; 
     appendPara("###\n".replaceAll("#", text), gd1); 
     appendPara("##############\n".replaceAll("#", text), gd2); 
     appendPara("#######\n".replaceAll("#", text), gd3); 
     appendPara("###########\n".replaceAll("#", text), gd4); 
    } 

    private void appendPara(String string, Drawable gd) { 
     final int start = mEditable.length(); 
     mEditable.append(string); 
     final int end = mEditable.length(); 
     mEditable.setSpan(new MySpan(gd), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 

} 
0

我不認爲這是可能的Android的默認的TextView。

您可以創建自己的觀點,通過擴展你View類和使用方法,如在視圖的onDraw()方法Canvas.drawText(...)Canvas.drawBitmap(...),創建具有不同梯度的每個段落。

這也可以幫助您控制行高和段落間距。

0

因爲您需要多個梯度Paragraphs,爲什麼不有一個TextViewParagraph併爲每個TextView設置獨特的梯度。

如果您DONOT知道你有多少段落,

您必須創建一個LinearLayoutheightwrap-content,並在運行時爲每一段創建一個TextViewfill_parent widthwrap_context height並添加TextView到父( LinearLayout)的觀點。並在代碼集backgrounds到您的TextViews

+0

我知道我可以爲每個段落創建TextView,並且這將解決它,與您同意但我不希望它那樣,我的文本是如此之長,每個段落必須有不同的漸變,所以如果我有例如50段,我必須有50個textview和50個漸變XML,即時通訊尋找更好的解決方案,順便感謝很多。 –