Android, TextView की चौड़ाई कैसे सीमित करें (और पाठ के अंत में तीन डॉट्स जोड़ें)?


317

मेरे पास एक TextViewऐसा अक्षर है जिसे मैं इसके पात्रों को सीमित करना चाहता हूं। वास्तव में, मैं यह कर सकता हूं, लेकिन जिस चीज की मुझे तलाश है, वह यह है कि स्ट्रिंग के अंत में तीन डॉट्स (...) कैसे जोड़े जाएं। यह दिखाता है कि पाठ जारी है। यह मेरा XML है लेकिन इसमें कोई भी बिंदु नहीं है, हालांकि यह मेरे पाठ को सीमित करता है।

<TextView 
        android:id                      = "@+id/tvFixture"
        android:layout_width            = "wrap_content"
        android:layout_height           = "wrap_content"
        android:layout_toLeftOf         = "@id/ivFixture_Guest"
        android:text                    = "@string/test_06"
        android:lines                   = "1"
        android:ems                     = "3"
        android:gravity                 = "right"
        style                           = "@style/simpletopic.black" 
        android:ellipsize="end"/>

जवाबों:


690

पदावनत:

android:singleLine="true"अपने टेक्स्टव्यू में एक और प्रॉपर्टी जोड़ें

अपडेट किया गया:

android:ellipsize="end" 
android:maxLines="1"

3
निश्चित रूप से सिंगललाइन की जरूरत है जब मैंने अभी यह प्रयास किया है। हालांकि यह कहते हैं कि पदावनत।
EGHDK

41
एंड्रॉइड: सिंगललाइन = "सच" पदावनत है और इसके बुरे दुष्प्रभाव हैं। एंड्रॉइड का उपयोग करें: ellipsize = "end" और maxLine = "1" इसके बजाय
Hamidreza Hosseinkhani

1
उपयोग करने के "बुरे दुष्प्रभाव" क्या हैं singleLine? इसे भी देखें: क्या एंड्रॉइड में एक्सएमएल की विशेषता सिंगललाइन डेप्रिसिएटेड है या नहीं?
सुरगाछ

1
btw, Android: अगर आप चाहते हैं तो अधिकतम 1 से अधिक हो सकता है :)
टूर होल्डर

1
क्या किसी को यह संदेश मिला है "W / StaticLayout: maxLineHeight -1 नहीं होना चाहिए। अधिकतम: 1 लाइन: 1">?
COLD ICE

157

निम्नलिखित वह है जो मैंने TextViewएक ही लाइन (तीन डॉट्स के साथ और बिना) के लिए मजबूर करने के लिए विभिन्न विकल्पों के साथ खेलकर सीखा है ।

यहां छवि विवरण दर्ज करें

एंड्रॉयड: Maxlines = "1"

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:text="one two three four five six seven eight nine ten" />

यह केवल पाठ को एक पंक्ति में लाता है। कोई भी अतिरिक्त पाठ छिपा हुआ है।

सम्बंधित:

एल्लिप्साइज = "अंत"

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:ellipsize="end"
    android:text="one two three four five six seven eight nine ten" />

यह उस पाठ को काट देता है जो फिट नहीं होता है, लेकिन उपयोगकर्ताओं को यह बताता है कि पाठ को एक दीर्घवृत्त (तीन बिंदु) जोड़कर काट दिया गया है।

सम्बंधित:

एल्लिप्साइज = "मार्की"

<TextView
    android:id="@+id/MarqueeText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:text="one two three four five six seven eight nine ten" />

यह टेक्स्ट स्क्रॉल को टेक्स्ट व्यू में स्वचालित रूप से बनाता है। ध्यान दें कि कभी-कभी इसे कोड में सेट करने की आवश्यकता होती है:

textView.setSelected(true);

माना जाता है android:maxLines="1"और android:singleLine="true"मूल रूप से एक ही काम करना चाहिए और चूंकि सिंगललाइन स्पष्ट रूप से पदावनत है इसलिए मैं इसका उपयोग नहीं करना पसंद करूंगा, लेकिन जब मैं इसे निकालता हूं, तो मार्की अब स्क्रॉल नहीं करता है। maxLinesहालांकि इसे लेने से कोई असर नहीं पड़ता।

सम्बंधित:

स्क्रॉल के साथ क्षैतिज क्षैतिज दृश्य

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/horizontalScrollView">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:scrollHorizontally="true"
        android:text="one two three four five six seven eight nine ten" />
</HorizontalScrollView>

यह उपयोगकर्ता को पाठ की पूरी पंक्ति को देखने के लिए मैन्युअल रूप से स्क्रॉल करने की अनुमति देता है।


लेकिन यह हर शब्द के अंत में केवल ellipsizing है। क्या जोड़ने का कोई तरीका है ... एक बहुत लंबे_को_शब्द_विशेष_सुविधा के मध्य ...?
टोबियास रीच

@TobiasReich, मुझे लगता है कि पूरा करने के लिए एक तरह से बनाया के बारे में पता नहीं है। आप Paint.measureText का उपयोग करके अपना खुद का बना सकते हैं ।
सुरगाच

कभी-कभी आपको ऐप की आवश्यकता हो सकती है: layout_constrainedWidth = "सत्य" भी
दान

80

अपने लेआउट फ़ाइल में TextView की इस संपत्ति का प्रयास करें ..

android:ellipsize="end"
android:maxLines="1"

31

मुझे लगता है कि आप चौड़ाई को एक पंक्ति में सीमित करना चाहते हैं और इसे चरित्र द्वारा सीमित नहीं करना चाहते हैं? जब singleLineसे पदावनत किया गया है, आप निम्नलिखित का एक साथ उपयोग करके देख सकते हैं:

android:maxLines="1"
android:scrollHorizontally="true"
android:ellipsize="end"

13

जैसे। आप उपयोग कर सकते हैं

android:maxLength="13"

यह टेक्सव्यू लंबाई को 13 तक सीमित कर देगा लेकिन समस्या यह है कि यदि आप 3 डॉट्स (...) को जोड़ने का प्रयास करते हैं, तो यह इसे प्रदर्शित नहीं करेगा, क्योंकि यह टेक्स्टव्यू लंबाई का हिस्सा होगा।

     String userName;
     if (data.length() >= 13) {
            userName = data.substring(0, 13)+ "...";

     } else {

            userName = data;

    }
        textView.setText(userName);

इसके अलावा आपको उपयोग करना होगा

 android:maxLines="1"

2
आपको "..." के बजाय "\ u2026" का बेहतर उपयोग करना चाहिए
झारो

यह सिर्फ एक उदाहरण के रूप में था। अगर मैं स्ट्रिंग्स.एक्सएमएल में तार डाल रहा हूं तो निश्चित रूप से मैं यूनिकोड के लिए जाऊंगा। कोई विशेष कारण जिसे आप यहाँ रखना चाहते हैं?
नयनेश गुप्ते

2
नहीं। मैंने हाल ही में यूनिकोड में इस चरित्र के अस्तित्व के बारे में जाना है और इस ज्ञान को साझा करने का फैसला किया है;)
ज़हरो

6

उपयोग

  • android:singleLine="true"
  • android:maxLines="1"
  • app:layout_constrainedWidth="true"

यह मेरा पूरा TextViewलग रहा है:

    <TextView
    android:id="@+id/message_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="5dp"
    android:maxLines="1"
    android:singleLine="true"
    android:text="NAME PLACEHOLDER MORE Text"
    android:textColor="@android:color/black"
    android:textSize="16sp"

    android:textStyle="bold"
    app:layout_constrainedWidth="true"
    app:layout_constraintEnd_toStartOf="@id/message_check_sign"
    app:layout_constraintHorizontal_bias="0"
    app:layout_constraintStart_toEndOf="@id/img_chat_contact"
    app:layout_constraintTop_toTopOf="@id/img_chat_contact" />

<Code> TextView </ code> का चित्र


5

मैं क्षितिज पुनर्नवीनीकरण का उपयोग कर रहा हूं।
1) यहाँ पर CardView में, TextView का उपयोग करते समय लंबवत रूप से विकृत हो जाता है

android:ellipsize="end"
android:maxLines="1"

बोल्ड टेक्सव्यूज विमन ग्रुप, जास्कोलस्की की जांच करें ... यहां छवि विवरण दर्ज करें

2) लेकिन जब मैंने ellipsize के साथ सिंगललाइन का उपयोग किया -

android:ellipsize="end"
android:singleLine="true"

बोल्ड टेक्सव्यूज विमन ग्रुप, जास्कोलस्की की जांच करें ... यहां छवि विवरण दर्ज करें

दूसरा समाधान मेरे लिए ठीक से (सिंगललाइन का उपयोग करके) काम किया। इसके अलावा मैंने ओएस संस्करण में परीक्षण किया है: 4.1 और ऊपर (8.0 तक), यह बिना किसी क्रैश के ठीक काम कर रहा है।


4

कोड:

TextView your_text_view = (TextView) findViewById(R.id.your_id_textview);
your_text_view.setEllipsize(TextUtils.TruncateAt.END);

xml:

android:maxLines = "5"

जैसे

मैथ्यू 13 में, शिष्यों ने यीशु से पूछा कि वह दृष्टान्तों में भीड़ से क्यों बोला। उसने उत्तर दिया, "यह आपको स्वर्ग के राज्य के रहस्यों को जानने के लिए दिया गया है, लेकिन उन्हें यह नहीं दिया गया है।

आउटपुट: मैथ्यू 13 में, शिष्यों ने यीशु से पूछा कि उसने दृष्टान्तों में भीड़ से बात क्यों की। उन्होंने उत्तर दिया, "यह आपको जानने के लिए दिया गया है ...


4

मुझे प्रयोग करके वांछित परिणाम मिला

android:maxLines="2"
android:minLines="2"
android:ellipsize="end"

चाल को अधिकतम मान और मिनीलाइन पर एक ही मान पर सेट किया गया है ... और न केवल एंड्रॉइड: लाइनें = "2", इस चाल को न करें। इसके अलावा आप किसी भी पदावनत विशेषताओं से बच रहे हैं।


4

टेक्स्टव्यू के लिए आपको अपने लेआउट में निम्नलिखित पंक्तियों को जोड़ना होगा

android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"

उम्मीद है इससे आपका काम बनेगा।


3

आप अपने टेक्स्टव्यू के अक्षरों की संख्या को सीमित कर सकते हैं और टेक्स्ट के बाद (...) जोड़ सकते हैं। मान लें कि आपको केवल 5 पत्र दिखाने की जरूरत है और उसके बाद आपको (...) दिखाने की जरूरत है, बस निम्नलिखित करें:

String YourString = "abcdefghijk";

if(YourString.length()>5){

YourString  =  YourString.substring(0,4)+"...";

your_text_view.setText(YourString);
}else{

 your_text_view.setText(YourString); //Dont do any change

}

थोड़ा हैक ^ _ ^। हालांकि इसका अच्छा समाधान नहीं है। लेकिन एक काम जिसके आसपास मेरे लिए काम किया: डी

संपादित करें: मैंने आपके सीमित संख्या के अनुसार कम वर्ण के लिए चेक जोड़ा है। पात्रों का।



3

के साथ काम करने के लिए एंड्रॉयड: एल्लिप्साइज विशेषता, आप सीमित करने के लेआउट चौड़ाई के TextView , जैसे कि पाठ TextView की दृष्टि से सीमा से बाहर है।

तो, एंड्रॉइड: लेआउट_ एक्सपोज़र विशेषता यहां एक महत्वपूर्ण भूमिका निभाती है, इसे तदनुसार सेट करें।

एक उदाहरण हो सकता है:

<TextView        
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:text="This is a very long text to be displayed"
    android:textSize="12sp"
    android:maxLines="1"            
     />

अब, यहाँ अगर पाठ में एंड्रॉयड: पाठ = "यह एक बहुत ही लंबी पाठ प्रदर्शित करने के लिए है" बाहर देखने की TextView से एक साथ चला जाता है layout_width = "120dp": एंड्रॉयड , एंड्रॉयड: एल्लिप्साइज = "अंत" काटना होगा पाठ और जगह ... (3 डॉट्स) इसके बाद। यानी यह बहुत लंबा है ... TextView में प्रदर्शित किया जाएगा।



2

आप इस लाइन को xml में लिख सकते हैं जहाँ आप ले जाते हैं textview:

android:singleLine="true"

2

@AzharShaikh का दृष्टिकोण ठीक काम करता है।

android:ellipsize="end"
android:maxLines="1"

लेकिन मुझे एक परेशानी का एहसास होता है कि TextView शब्द (डिफ़ॉल्ट रूप से) से छोटा हो जाएगा। दिखाएँ कि क्या हमारे पास एक पाठ है:

परीक्षण long_line_without_any_space_abcdefgh

पाठ दृश्य प्रदर्शित करेगा:

परीक्षा...

और मुझे इस परेशानी से निपटने के लिए समाधान मिला, रिक्त स्थान को यूनिकोड नो-ब्रेक स्पेस कैरेक्टर से बदलें, यह टेक्स्ट व्यू को इसके बजाय वर्णों पर लपेटता है:

yourString.replace(" ", "\u00A0");

परिणाम:

परीक्षण long_line_without_any_space_abc ...


2
        <TextView
            android:id="@+id/product_description"
            android:layout_width="165dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:paddingLeft="12dp"
            android:paddingRight="12dp"
            android:text="Pack of 4 summer printed pajama"
            android:textColor="#d2131c"
            android:textSize="12sp"
            android:maxLines="2"
            android:ellipsize="end"/>


0

आप ऐसा कर सकते हैं xml:

<TextView 
    android:id="@+id/textview"
    android:maxLines="1" // or any number of lines you want
    android:ellipsize="end"
    />

मैं किसी भी समाधान के Dotsसाथ maxLength="35"संपत्ति के साथ 3 @ अंत कैसे डाल सकता हूं ?
सागर

-1

तुम बस बदलो ...

android:layout_width="wrap_content"

इस नीचे की रेखा का उपयोग करें

android:layout_width="match_parent"

.......

   <LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
       android:layout_marginLeft="10dp"
       android:layout_marginTop="10dp"
       android:layout_toRightOf="@+id/visitBox"
       android:orientation="vertical" >

             <TextView
                  android:id="@+id/txvrequestTitle"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:singleLine="true"
                  android:text="Abcdefghighiklmnon"
                  android:textAppearance="? 
                  android:attr/textAppearanceLarge"
                  android:textColor="@color/orange_color" />

   </LinearLayout>

सिंगललाइन पदावनत है
निक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.