Android, TextView'in genişliğini nasıl sınırlayabilirim (ve metnin sonuna üç nokta ekleyebilirim)?


317

TextViewKarakterleri sınırlamak istediğim bir şey var . Aslında bunu yapabilirim ama aradığım şey dizenin sonuna nasıl üç nokta (...) ekleyeceğidir. Bu metnin devam ettiğini gösterir. Bu benim XML'im ama metnimi sınırlasa da nokta yok.

<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"/>

Yanıtlar:


692

Kullanımdan kaldırılan:

android:singleLine="true"Metin Görüntünüze bir mülk daha ekleyin

Güncellenmiş:

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

3
Bunu denediğimde kesinlikle singleLine'e ihtiyacım var. Her ne kadar kullanımdan kaldırılmış diyorsa da.
EGHDK

41
android: singleLine = "true" kullanımdan kaldırıldı ve kötü yan etkileri var. android kullanın: ellipsize = "end" ve maxLine = "1" yerine
Hamidreza Hosseinkhani

1
Kullanmanın "kötü yan etkileri" singleLinenelerdir? Ayrıca bkz: xLml singleLine özelliği kullanımdan kaldırıldı mı yoksa Android'de değil mi?
Suragch

1
btw, android: maxLines isterseniz 1'den büyük olabilir :)
Touré Holder

1
Herkes bu msg var "W / StaticLayout: maxLineHeight -1 olmamalıdır. MaxLines: 1 lineCount: 1">?
SOĞUK BUZ

157

Aşağıda, TextViewtek bir satıra zorlamak için çeşitli seçeneklerle oynayarak öğrendiğim şey (üç nokta olan ve olmayan).

resim açıklamasını buraya girin

robot: 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" />

Bu sadece metni bir satıra zorlar. Fazladan herhangi bir metin gizlidir.

İlişkili:

ellipsize = "son"

<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" />

Bu, sığmayan metni keser, ancak kullanıcılara üç nokta (üç nokta) ekleyerek metnin kesildiğini bildirir.

İlişkili:

ellipsize = "kayan yazı"

<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" />

Bu, metnin TextView boyunca otomatik olarak kaydırılmasını sağlar. Bazen kodda ayarlanması gerektiğini unutmayın :

textView.setSelected(true);

Sözde android:maxLines="1"ve android:singleLine="true"temelde aynı şeyi yapmalı ve singleLine görünüşte kaldırıldığı için onu kullanmamayı tercih ederim, ancak çıkardığımda seçim çerçevesi artık kaymıyor . Çıkarmak maxLinesyine de etkilemez.

İlişkili:

Kaydırma ile HorizontalScrollView

<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>

Bu, kullanıcının tüm metin satırını görmek için manuel olarak kaydırmasını sağlar.


Ama bu sadece her kelimenin sonunda elips oluyor. Eklemek için herhangi bir yol var mı ... very_long_word_without_whitespace ...?
Tobias Reich

@TobiasReich, bunu başarmak için inşa edilmiş bir yolun farkında değilim. Paint.measureText kullanarak kendiniz yapabilirsiniz .
17'de Suragch

Bazen uygulamaya ihtiyacınız olabilir: layout_constrainedWidth = "true" da
Dan Crisan

80

Düzen dosyanızda TextView'ın bu özelliğini deneyin.

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

31

Genişliği bir satıra sınırlamak ve karakter ile sınırlamak istemiyorum. Kullanımdan singleLinekaldırıldığı için aşağıdakileri birlikte kullanmayı deneyebilirsiniz:

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

13

Örneğin. kullanabilirsiniz

android:maxLength="13"

Bu, texview uzunluğunu 13 ile sınırlayacaktır, ancak sorun 3 nokta (...) eklemeye çalışırsanız, textview uzunluğunun bir parçası olacağı için göstermez.

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

     } else {

            userName = data;

    }
        textView.setText(userName);

bunun dışında kullanmalısın

 android:maxLines="1"

2
"..." yerine "\ u2026" kullanmalısın
Zharro

bu sadece bir örnekti. Strings.xml dizeleri koyarsanız kesinlikle unicodes için gidiyorum. Buraya koymak istediğiniz özel bir neden var mı?
Nayanesh Gupte

2
Hayır! Kişisel olarak bu karakterin Unicode'daki varlığını öğrendim ve bu bilgiyi paylaşmaya karar verdim;)
Zharro

6

kullanım

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

Tam TextViewgörünüşüm şöyle:

    <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> 'un resmi


5

Horizonal Recyclerview kullanıyorum.
1) Burada CardView'da, TextView kullanırken dikey olarak bozuluyor

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

Cesur TextViews Wyman Group, Jaskolski'yi kontrol edin ... resim açıklamasını buraya girin

2) Ama elips ile birlikte singleLine kullandığımda -

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

Cesur TextViews Wyman Group, Jaskolski'yi kontrol edin ... resim açıklamasını buraya girin

2. çözüm benim için düzgün çalıştı (singleLine kullanarak). Ayrıca OS sürümünde test ettim: 4.1 ve üstü (8.0'a kadar), herhangi bir çökme olmadan iyi çalışıyor.


4

kod:

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

xml:

android:maxLines = "5"

Örneğin

Matta 13'te öğrenciler İsa'ya neden kalabalıklarla benzetmelerde konuştuğunu sordu. "Cennetin krallığının gizemlerini bilmek sana verildi, ama onlara verilmedi.

Çıktı: Matta 13'te, öğrenciler İsa'ya neden kalabalıklarla benzetmelerde konuştuğunu sordu. "Bilmeniz için size verildi ...


4

Kullanarak istenen sonucu aldım

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

Hile maxLines ve minLines aynı değere ayarlanır ... ve Sadece android değil: lines = "2", hile yapmayın. Ayrıca, kullanımdan kaldırılmış özelliklerden kaçınıyorsunuz.


4

Metin görünümü için mizanpajınıza aşağıdaki satırları eklemeniz gerekir

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

Umarım bu işe yarar.


3

Metin görünümünüzün karakter sayısını sınırlayabilir ve metnin arkasına (...) ekleyebilirsiniz. Sadece 5 harf göstermeniz ve daha sonra göstermeniz gerekir (...), Sadece aşağıdakileri yapın:

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

}

biraz kesmek ^ _ ^. Gerçi iyi bir çözüm değil. Ama benim için çalışan bir iş: D

EDIT: Ben sınırlı no göre daha az karakter için kontrol ekledim. karakter kümesi.



3

Android: ellipsize özniteliğiyle çalışmak için , TextView'in düzen genişliğini sınırlamanız gerekir , böylece metin TextView görünümünden sınırların dışında.

Yani, android: layout_width özelliği burada önemli bir rol oynar, buna göre ayarlayın.

Bir örnek şunlar olabilir:

<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"            
     />

Şimdi, burada eğer metin içinde android: text = "Bu görüntülenecek çok uzun bir metindir" a sahip TextView bakış söner layout_width = "120dp": android , android: ellipsize = "son" keser metin ve yer ... (3 nokta) ondan sonra. ie Bu çok uzun ... TextView içinde görüntülenecektir.


2

Metin görünümünde düzeltme yüksekliği ve genişliği verdiğinizi düşünüyorum. O zaman çözümünüz işe yarayacaktır.


2

bu satırı xml içine yazabilirsiniz textview:

android:singleLine="true"

2

@AzharShaikh'in yaklaşımı iyi çalışıyor.

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

Ancak, TextView'in sözcükle (varsayılan olarak) kesileceğine dair bir sorun olduğunu fark ediyorum. Şunun gibi bir metnimiz olup olmadığını gösterin:

test long_line_without_any_space_abcdefgh

TextView şunu görüntüler:

Ölçek...

Ve bu sorunu çözmek, boşlukları unicode aralıksız boşluk karakteri ile değiştirmek için çözüm buldum, bu kelimeler yerine TextView karakterlerini sarıyor:

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

Sonuç:

test 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"/>

1

Bu iki satırı metninize ekleyin

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

0

bunu şu şekilde yapabilirsiniz xml:

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

Nasıl herhangi bir çözüm Dotsile 3 @ son koymak maxLength="35"?
Sagar

-1

Siz sadece değiştirin ...

android:layout_width="wrap_content"

Aşağıdaki satırı kullanın

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>

singleLine kullanımdan kaldırıldı
Nick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.