2012-06-20 13 views
8

के लिए व्यक्तिगत लाइन रिक्ति TextView की प्रत्येक टेक्स्ट लाइन के लिए अलग-अलग पंक्ति स्पैसिंग को परिभाषित करना संभव है?प्रत्येक पंक्ति

उदाहरण:

TextView tv = new TextView(context); 
tv.setText("line1\nline2\nline3"); 

विधि setLineSpacing(float add, float mult)TextView के सभी पाठ लाइनों के लिए लाइन spacings परिभाषित करता है। मैं लाइन 1 और लाइन 2 और लाइन 2 और लाइन 3 के बीच एक अलग लाइन दूरी के बीच एक और लाइन दूरी को परिभाषित करना चाहता हूं।

कोई विचार यह कैसे करना है?

क्या कोई स्पैन करने योग्य समाधान प्रदान करता है?

उत्तर

1

आप एचटीएमएल का उपयोग कर टेक्स्टव्यू में इस तरह की विशिष्ट शैलियों को कर सकते हैं। इस उदाहरण का प्रयास करें,

tv.setText(Html.fromHtml("<h2>Text1</h2><br><p>Text2</p>")); 

यहाँ की अनुमति है टैग के विभिन्न प्रकार,

<a href="..."> 
<b> 
<big> 
<blockquote> 
<br> 
<cite> 
<dfn> 
<div align="..."> 
<em> 
<font size="..." color="..." face="..."> 
<h1> 
<h2> 
<h3> 
<h4> 
<h5> 
<h6> 
<i> 
<img src="..."> 
<p> 
<small> 
<strike> 
<strong> 
<sub> 
<sup> 
<tt> 
<u> 
+0

जबकि यह काम करता है यह बहुत महंगा है क्योंकि एक्सएमएल पार्सिंग कोड के पूरे समूह को आंतरिक रूप से बुलाया जाता है। इस – martyglaubitz

-3

इसकी नहीं मुमकिन तकनीक C, C++। क्या आप setText() के अंदर का उपयोग में इस्तेमाल होता है, यह पता चलता पूरा पाठ जो आप लिखते हैं।

+3

से सावधान रहें यह उत्तर सही नहीं है। कृपया जो जवाब देखें। –

16

हां, आप इसे LineHeightSpan इंटरफ़ेस का उपयोग करके कर सकते हैं। यहां ऐसा करने के लिए पर एक त्वरित और गंदे नमूना कोड:

public class MyActivity extends Activity { 

    private static class MySpan implements LineHeightSpan { 
     private final int height; 

     MySpan(int height) { 
      this.height = height; 
     } 

     @Override 
     public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v, 
       FontMetricsInt fm) { 
      fm.bottom += height; 
      fm.descent += height; 
     } 
    } 

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

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

     tv.setText("Lines:\n", BufferType.EDITABLE); 
     appendLine(tv.getEditableText(), "Line 1 = 40\n", 40); 
     appendLine(tv.getEditableText(), "Line 2 = 30\n", 30); 
     appendLine(tv.getEditableText(), "Line 3 = 20\n", 20); 
     appendLine(tv.getEditableText(), "Line 4 = 10\n", 10); 
    } 

    private void appendLine(Editable text, String string, int height) { 
     final int start = text.length(); 
     text.append(string); 
     final int end = text.length(); 
     text.setSpan(new MySpan(height), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 

} 
+0

यूसुफ धन्यवाद, यह एक उत्कृष्ट और बहुत उपयोगी उदाहरण है, मैंने इसका परीक्षण किया है और यह काम करता है! –

+0

यह लाइन 4 के बाद आकार 40 के अतिरिक्त स्थान को जोड़ने लगता है। क्या इस अतिरिक्त स्थान से छुटकारा पाने का कोई शानदार तरीका है? – erin

+0

@erin मैंने 'tv.getEditableText() जोड़ा। ("लाइन 5 \ n ललित 6");' अंतिम एपेंडलाइन() के बाद क्रिएट() पर कॉल करें और आपने जो अतिरिक्त स्थान उल्लेख किया है उसे नहीं देखा, शायद हम एक ही बात के बारे में बात नहीं कर रहे हो? – Joe

-3

इस प्रयास करें:

android:lineSpacingMultiplier = "3" 

पंक्ति रिक्ति भी दशमलव प्रारूप में हो सकता है।

+0

मुझे इस 100% को सत्यापित करने का मौका नहीं मिला है, लेकिन मुझे लगता है कि यह वास्तव में मेरे उपयोग के मामले में समस्या हल करता है, यह सुनिश्चित नहीं है कि इसे क्यों वोट दिया गया था। – CodyEngel

+2

@ हुस्कीहुस्की यह पूरे दृश्य के लिए लाइन स्पेसिंग को बदलता है, जबकि ओपी अलग-अलग लाइनों के लिए लाइन स्पेसिंग को बदलना चाहता है। – Darkwater