Android'de Çok Satırlı TextView?


154

Aşağıdakileri beğendim xml

<TableRow>
    <TextView android:id="@+id/address1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4" 
        android:singleLine="false"              
        android:text="Johar Mor, Gulistan-e-Johar, Karachi" >
    </TextView> 
</TableRow>

Çalışmıyor multilineve kullanıyorum TableLayout...

öyleyse burada yaptığım hata nedir?

Yanıtlar:


197

Girdiğiniz metin TextViewkısaysa, otomatik olarak dört satıra genişletilmez. İsterseniz TextViewiçin her zaman ne olursa olsun ayarlanmış bunun metnin uzunluğu, dört hatları android:linesniteliğini:

<TextView
    android:id="@+id/address1"
    android:gravity="left"
    android:layout_height="fill_parent"
    android:layout_width="wrap_content"
    android:maxLines="4"
    android:lines="4"
    android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."></TextView>

Bunu TableRow ile yapabilirsiniz, aşağıdaki koda bakın

<TableRow >
        <TextView
            android:id="@+id/tv_description_heading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:padding="8dp"
            android:text="@string/rating_review"
            android:textColor="@color/black"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tv_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:maxLines="4"`enter code here`
            android:padding="8dp"
            android:text="The food test was very good."
            android:textColor="@color/black"
            android:textColorHint="@color/hint_text_color" />
    </TableRow>

21
OP vermedi "her zaman ne olursa olsun metnin uzunluğunun dört satırlık olmasını TextView istiyoruz".
tar

7
Bu cevap benim için çalıştı. Ama en iyi sonuçları aldım, maxlines ve çizgilerle değil, maxlines ve minlines ile ve çizgiler kullanmadım. Minlines'ı 1'e ve maxlines'ı en büyük verilerden daha büyük olarak ayarladım. Bu şekilde, verilerin kompakt bir görünümü için 1'den N'ye kadar satır alırım.
R Earle Harris

1
@REarleHarris: Ben de aynı çözümü denedim ama sorun maxLines sayımı almıyor olmasıdır. Tüm veriler minLines sayısında görüntülenir. Şimdi ne deneyebilirim
xml'de

119

Sadece kullanırsanız ekleyeceğimi düşündüm:

android:inputType="textMultiLine"

Ardından, görünüm tıklanabilir olmayı durdurur. Tıklamalara yanıt vermesi gereken slayt çekmece menümde çok satırlı metin görünümleri almaya çalışıyordum.

android:singleLine="false"Çalıştı ince olsa.


3
Android'in kendi tiftik hataları, bu özelliği TextView ile değil, EditText ile kullanmanızı önerdiğinden, bu tam olarak doğru değildir.
Jared

1
TextMultiline'den bahsediyor musunuz? Dediğim değil kullanmak. singleLine TextViews'da iyidir: developer.android.com/reference/android/widget/…
Ryan

3
android: singleLine artık kullanımdan kaldırıldı
Humberto Castañeda

Emin misiniz? Sadece yorumlarda bu şekilde işaretlenmiş olmasına rağmen, yukarıdaki yorumda bağlantı verdiğim dokümanlarda bahsetmiyor. TextView sayfasında bundan bahsetmedikleri garip. Sorun onlar önermek geçici çözüm (çok satırlı) benim OP koymak gibi görünümü tıklanabilir olmasını durdurur. developer.android.com/reference/android/R.attr.html#singleLine
Ryan

3
android: singleLine = "false" varsayılan değer olduğu için kullanımdan kaldırıldı
Ashraf Alshahawy

28

Cevapların hiçbirini beğenmedim. Basitçe inputType'ı ayarlayın ve TextView içeriğine adapte olacak

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine"/>

Nexus One (2.3) ve Nexus 4 (4.4) üzerinde test edildi


52
android: inputType = "textMultiLine" TextView için değil, onun EditText için ve bunu yapmaya çalışırsanız bir uyarı alırsınız
bhaskarc

2
Uyarıları dinlemelisiniz. @Ryans çözeltisi kullanın.
m02ph3u5

15

Metninizin içine '\ n' yazmanız yeterlidir ... ekstra özellik gerekmez :)

          <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Pigeon\nControl\nServices"
            android:id="@+id/textView5"
            android:layout_gravity="center"
            android:paddingLeft="12dp"/> 

6
Bu çözüm, metni dinamik olarak ayarlamak için kullanılamaz
Sagar Devanga

@SagarDevanga Metni dinamik olarak ayarlamak ne anlama geliyor?
juil

3
@SagarDevanga, az önce kontrol ettim, dinamik ve statik metinler varsayılan olarak çok satırlıdır (kullanılıyorsa \n), bu yüzden doğru bir çözümdür. Hayır singleLine=false, hayır lines=4vb.
CoolMind

10

ScrollView'da metin görünümü eklemeniz yeterlidir

<ScrollView
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:layout_marginLeft="15dp"
           android:layout_marginRight="15dp"
           android:layout_marginTop="20dp"
           android:fillViewport="true">

           <TextView
               android:id="@+id/txtquestion"
               android:layout_width="fill_parent"
               android:layout_height="match_parent"
               android:background="@drawable/abs__dialog_full_holo_light"
               android:lines="20"
               android:scrollHorizontally="false"
               android:scrollbars="vertical"
               android:textSize="15sp" />

       </ScrollView>

5

Metin görünümünde satır sayısını zorlayan çözümü sevmiyorum. Burada önerilen çözüm ile çözmenizi tavsiye ederim . Gördüğüm gibi OP aynı zamanda metin görünümünün tablodaki gibi görünmesini sağlamakta zorlanıyor ve shrinkColumnsistenen şeyi elde etmek için doğru bir direktif.


5

Düzenlenemez ve odaklanamaz hale getirerek EditText ile çalışmaya çalışın, ayrıca bir kaydırma çubuğu görüntüleyebilir ve EditText'in alt çubuğunu silebilirsiniz.
İşte bir örnek:

<EditText
android:id="@+id/my_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_parent"
android:inputType="textMultiLine"                   <!-- multiline -->
android:clickable="false"                         <!-- unclickable -->
android:focusable="false"                         <!-- unfocusable -->
android:scrollbars="vertical"     <!-- enable scrolling vertically -->
android:background="@android:color/transparent"   <!-- hide the underbar of EditText -->
/>  

Bu yardımcı olur umarım :)


3

Önce eşdeğeriyle değiştirin "\n", sonra dizeyi çağırın . Aşağıdaki adımları izleyin:Html"&lt;br&gt;"Html.fromHtml()

String text= model.getMessageBody().toString().replace("\n", "&lt;br&gt;")
textView.setText(Html.fromHtml(Html.fromHtml(text).toString()))

Bu mükemmel çalışıyor.


2

Öğrendiklerim, bir sonraki satıra fren yapmasını istediğiniz kelimeler arasına "\ n" eklemekti. Örneğin...

<TextView
    android:id="@+id/time"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAlignment="center"
    android:text="M-F 9am-5pm \n By Appointment Only" />

17:00 ile By tarafından By benim sonraki satırın başlayıp bitmesini istediğim yerde daha fazla kontrol izin verdi.


2

Çok satırlı TextView için bulduğum en iyi cevap:

android:inputType="textMultiLine"

8
Değil için android:inputTypebir özellik <EditText>değil <TextView>mi?
timtim

Bu özelliği TextView'e eklerseniz bir uyarı görünür. - Attributed android: inputType = "textMultiLine" <TextView> ile kullanılmamalıdır. Aslında bu özellik EditText içindir.
Yhondri

2

android kullanabilirsiniz: inputType = "textMultiLine"

  <TextView android:id="@+id/address1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:gravity="left"
    android:maxLines="4" 
    android:inputType="textMultiLine"
    android:text="Johar Mor, Gulistan-e-Johar, Karachi" />

1
Bu bir uyarı olarak gösterilir. TextView
Stealth Rabbi

1
inputType yalnızca EditText bileşenleri için desteklenir.
Chamin Wickramarathna

1

Kullandım:

TableLayout tablelayout = (TableLayout) view.findViewById(R.id.table);
tablelayout.setColumnShrinkable(1,true);

benim için çalıştı. 1 sütun sayısıdır.


0
You can do this with TableRow, see below code

<TableRow >
    <TextView
        android:id="@+id/tv_description_heading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:padding="8dp"
        android:text="@string/rating_review"
        android:textColor="@color/black"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tv_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4"`enter code here`
        android:padding="8dp"
        android:text="The food test was very good."
        android:textColor="@color/black"
        android:textColorHint="@color/hint_text_color" />
</TableRow>

0

En basit yol

<TableRow>
    <TextView android:id="@+id/address1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4" 
        android:singleLine="false"              
        android:text="Johar Mor,\n Gulistan-e-Johar,\n Karachi" >
    </TextView> 
</TableRow>

\nYeni bir satır eklemek istediğiniz yeri kullanın Umarım size yardımcı olur


0

Anahtar ile TextView'un olan singleline=false(evet itiraz edildi, ancak bir esere sahip olmalıdır edilir) ile kombine lines, maxlinesyaminlines

<TextView
                android:id="@+id/txtBowlers"
                style="@style/Default_TextBox.Small"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="4dp"
                android:singleLine="false"
                android:maxLines="6"
                android:text="Bob\nSally\nJohn"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="@+id/txtTeamName"
                app:layout_constraintTop_toBottomOf="@+id/txtTeamName"/>

-1

Düzen dosyasına uzun satırlar yazmak yerine neden bir dize bildirmiyorsunuz? Bunun için 'android: text = "@ string / text"' düzen dosyasına bir kod satırı bildirmeniz ve \\ app \ src \ main \ res \ değerleri \ strings.xml dosyasına gitmeniz ve bir kod satırı eklemeniz gerekir. 'Çok satırlı metniniz buraya' Satırı otomatik olarak ayarlanacak herhangi bir noktadan ayırmak için '\ n' kullanın.


-4

benim için çözümlerin hiçbiri işe yaramadı. Bu sorunun tam bir cevabı olmadığını biliyorum, ama bazen yardımcı olabilir.

Dikey bir metin dizisine 4 metin görüntüsü koydum.

<Linearlayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation:"vertical"

    ...>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line1"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line2"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line3"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line4"
       .../>
</LinearLayout>

Bu çözüm, metin görünümü metninin etiketler gibi sabit olduğu durumlar için iyidir.


1
Lütfen bunu yapma.
humble_wolf

-23

TextView, tek satıra sığacak kadar alan elde etmeyecek ve singLine öğesi true değerine ayarlanmadığında çok satırlı olacaktır.

Bir satırdaki alanı alırsa, çok satırlı olmayacaktır.


7
Sabit genişlik yerine fill_parent kullanmak istersem ne olur? İçeriğim kesilir, eğer yaparsam ...
happyhardik

6
Ben deneyeceğim android:singleLine="false"veya android:inputType="textMultiLine"(Marageus tarafından açıklandığı gibi) .Her android:inputType="textMultiLine"ikisi de mevcut olduğunda öncelikli not
Romantic Electron

Yorum yapan başkalarının görüşlerini paylaşıyorum, bu tamamen yanlış ve bunun neden kabul edilen cevap olduğu konusunda şaşkınım.
Aleks G
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.