Android'de metin görünümünde metin nasıl kaydırılır


86

Android platformunda TextView'da metin nasıl kaydırılacağını bilen var mı? yani, metin görünümündeki metin ekran uzunluğunu aşarsa, ikinci satırda görüntülenmelidir.

Aşağıdakileri araştırdım ve denedim:

android:scrollHorizontally="false",
android:inputType="textMultiLine",
android:singleLine="false"

Ama hiçbiri işe yaramıyor ..

Biri bunu nasıl yapabileceğimi önerebilir mi?


7
Metin Görünümleri varsayılan olarak sözcük kaydırmalıdır. Tüm düzeninizi gönderebilir misiniz?
danh32

Metin görünümü bir tablo düzeni içinde olabilir mi? Öyleyse sana bir cevabım var.
JohnFx

1
Benim durumumda, metin görünümünü metni birden çok satıra kaydırmaya zorlamak için yaklaşık yarım düzine öznitelik (aşağıda açıklanmıştır) ekledikten sonra, başarılı olamadığımda, bir özniteliğimin olduğunu fark ettim android:inputType="textPersonName". Görünüşe göre Android Studio tasarım aracı tarafından eklenmişti. Bu özniteliğin kaldırılması sorunu çözdü! Kaydırmayı engelleyen başka giriş türleri de olabilir.
LarsH

Yanıtlar:


57

Benim için bu sorun yalnızca Android <4.0'da meydana geldi

Kullandığım parametrelerin kombinasyonu şunlardı:

android:layout_weight="1"
android:ellipsize="none"
android:maxLines="100"
android:scrollHorizontally="false"

MaxLines sayısı, TextView sarmamı oluşturan rastgele son parça gibi görünüyordu.


9
Artık eski bir konu olduğunu biliyorum ama bulgularımı yayınlayacağımı düşündüm. Sadece 'android: maxLines' kullandım ve ardından metnimi sardım. Tezahürat @Guykun
StuStirling

Yine, bu, TextView yüksekliğini basitçe ayarlamakla match_parentaynı şeydir; bu, TextView'ün yüksekliğini ekstra satırları içerecek şekilde genişletmekle aynı şey değildir.
SMBiggs

51

Kısıt Düzeni

<TextView
android:id="@+id/some_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"

app:layout_constraintLeft_toLeftOf="@id/textview_above"
app:layout_constraintRight_toLeftOf="@id/button_to_right"/>
  • Düzen genişliğinizin sıfır olduğundan emin olun
  • sol / sağ kısıtlamalar tanımlandı
  • wrap_content düzen yüksekliği yukarı / aşağı genişletmeye izin verir.
  • android:maxLines="2"Dikey genişlemeyi önlemek için ayarlayın (2 yalnızca örnektir)
  • Elipsler prob. maksimum çizgileri olan iyi bir fikirandroid:ellipsize="end"

0dp genişliği, widget'ınızın ne kadar geniş olduğunu belirlemek için sol / sağ kısıtlamalarına izin verir.

Sol / sağ sınırlamaların ayarlanması, widget'ınızın içinde metninizin kaydırılacağı gerçek genişliğini ayarlar.

Kısıtlama Düzeni belgeleri


Evet! Bu tam olarak nasıl işliyor! Genişliği 0 dp olarak ayarladığınızdan emin olun
Yoraco Gonzales

sol ve sağ kısıtlamaları ayarlamak, metnin sağ sınırların ötesine taşması yerine benim için sarmalamaya yardımcı oldu
Jia Tse

31

Durum için TextViewbir içindedir TableLayout, çözüm kümesine olduğu android:shrinkColumns="1"üzerine TableLayout. ( 1Kaydırmak istediğiniz TextView sütun numarasıyla değiştirin . (0 dizine alınmış))

AFAICT, üzerinde başka öznitelik gerekmez TextView.

Diğer durumlar için buradaki diğer cevaplara bakın.

FWIW, başlangıçta bir tür

 <TextView
   android:id="@+id/inventory_text"
   android:layout_width="fill_parent"
   android:layout_weight="1"
   android:width="0dp"

ancak bu, her şeyin içinde bulunduğu Diyalog'un altında fazladan bir boşlukla sonuçlandı.


Aradığım buydu! Aksi takdirde sözlerim kesilir
Carson Holzheimer

12

2 parametre kullanmalısınız:

  • android:ellipsize="none" : metin, metin görünümü genişliğinde kesilmez

  • android:scrollHorizontally="false" metin gerektiği kadar çok satıra kaydırılır


5
Bu benim için çalışmıyor. (FWIW, TableLayout'ta TableRow'da TextView var.)
aij

8

Kullanım app:breakStrategy="simple"içinde AppCompatTextViewbu paragraf düzeni üzerinde kontrol edecek.

Üç sabit değere sahiptir

  • dengeli
  • yüksek kalite
  • basit

TextView XML'nizde tasarım

<android.support.v7.widget.AppCompatTextView
        android:id="@+id/textquestion"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:scrollHorizontally="false"
        android:text="Your Question Display Hear....Your Question Display Hear....Your Question Display Hear....Your Question Display Hear...."
        android:textColor="@android:color/black"
        android:textSize="20sp"
        android:textStyle="bold"
        app:breakStrategy="simple" />

Mevcut minimum api seviyeniz 23 veya üzeriyse, Kodlamada

yourtextview.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);

Daha fazla referans için bu BreakStrategy'ye bakın

Metin görünümü sonuStrateji resmi


7

Bu sorunu çözmek olmalıdır: android:layout_weight="1".


Bu, TextView'in olabildiğince fazla yer kaplaması için genişlemesine neden olur, bu da Yükseklik ayarıyla aynıdır match_parent. OP'nin istediği şey tam olarak aynı değil.
SMBiggs

1
TableLayout durumunda layout_weight="1", sorunu benim için çözdüm . Ancak, TextView içeren TableRow'um layout_heightbelirli bir değere ayarlanmıştı. Belki birisi için yararlı olabilir
kit

5

Tamam arkadaşlar gerçek ortada bir yerde çünkü konuyu ebeveynin ve çocuğun bakış açısından görmelisiniz. Aşağıdaki çözüm YALNIZCA spinner modu = dialogAndroid sürümünden bağımsız olarak çalışır (burada sorun yok .. VD ve DesireS'de Android => 2.2 ile test edildi):

  1. . Döndürücünün (ana) modunu şu şekilde ayarlayın:

    android:spinnerMode="dialog"  
    
  2. Metin görünümünün (alt özel görünüm) özelliklerini şu şekilde ayarlayın:

    android:layout_weight="1"  
    android:ellipsize="none"  
    android:maxLines="100"  
    android:scrollHorizontally="false"
    

Umarım bu sizin için de işe yarar.


'Açılır' modunda çalışmasını sağlamak için çok şey denedim ama hiçbir şey işe yaramadı. Şimdi 'diyalog' moduna yerleşti.
Mangesh

4

İle android:maxEmsbirlikte belirli bir değere ayarlandığında android:layout_weight="1", TextView ems'nin verilen uzunluğuna ulaştığında kaydırılmasına neden olur.


RelativeLayout'a yerleştirilen TextView için de çalışır.
ayz4sci

saatlerdir arıyor, teşekkürler, kısıtlama üzerinde de harika çalışıyorLayout
TarekB

3

Android Studio 2.2.3'te inputTypemülkün altında adında bir özellik var textMultiLine. Bu seçeneği seçmek benim için benzer bir sorunu çözdü. Umarım bu yardımcı olur.


2
Bu EditText içindir, Textview değil
PsychedelicSubstance

2

RecyclerView içindeki bir düzen içinde bir TextView üzerinde çalışıyordum. İçin Metin, eski kesilme vardı Read this messagegördüm,: Read this. android:maxLines="2"TextView üzerinde ayarlamayı denedim , ancak hiçbir şey değişmedi. Ancak, ilk android:lines="2"sırada Read thisve message2. sırada sonuçlandı .


1

Ben de aynı sorunu yaşadım. Değişikliğin ardından işe yaradı -

android:layout_width="wrap_content"

Elips, maxLines veya layout_weight - hiçbiri fark yaratmadı. Not - Ebeveyn genişliği de wrap_content olarak ayarlanır.


1

Tek yapmanız gereken metin görünümü genişliğinizi ayarlamaktır .

android: layout_width = "60dp"

genişliği tercihinize göre değiştirebilirsiniz. Böyle çalışıp çalışmadığını kontrol etmek için uzun bir cümle yazmanız yeterli

android: text = "Birinci sınıf yazılım mühendisi olmak istiyorum"


1

@ Guykun'un yaklaşımını deneyin

android:layout_weight="1" android:ellipsize="none" android:maxLines="100" android:scrollHorizontally="false"

Ayrıca, ebeveyn genişliğinin içeriği kaydıracak şekilde ayarlanmadığından emin olun. Kaçırdığım şey buydu.


0

Android 2.2 kullanıyorum ve metin görünümüm ekranı aşarsa otomatik olarak sonraki satıra gidecek.

Metnin ekranın sonundan önce bir sonraki satıra gitmesini istiyorsanız, ekleyin (sadece kendi dp değerinizi girin). Metnin sağ tarafında bir resim varsa bu faydalı olacaktır.

android:layout_marginRight="52dp"

0

Yeterince garip - TextView'ımı Code'da oluşturdum ve paketlendi - standart şeyler dışında hiçbir şey ayarlamama rağmen - ama kendiniz görün:

LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
childParams.setMargins(5, 5, 5, 5);

Label label = new Label(this);
label.setText("This is a testing label This is a testing label This is a testing label This is a testing labelThis is a testing label This is a testing label");
label.setLayoutParams(childParams);

Params tanımından da görebileceğiniz gibi bir LinearLayout kullanıyorum. Label sınıfı, TextView'i genişletir - orada yazı tipi boyutunu ve yazı tipi rengini ayarlamak dışında hiçbir şey yapmaz.

Emülatörde çalıştırırken (API Seviye 9) metni otomatik olarak 3 satıra kaydırır.


Bu kodun kullanımına dikkat edin LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);. Büyük olasılıkla bu, "automagic" olduğunu düşündüğünüz ambalajı yapıyor
nemesisfixx

0

Sadece belirli layout_withbir boyuta ayarlayın , metin maksimum genişliği doldurduğunda bir sonraki satıra taşarak bir sarma efektine neden olur.

<TextView
    android:id="@+id/segmentText"
    android:layout_marginTop="10dp"
    android:layout_below="@+id/segmentHeader"
    android:text="You have the option to record in one go or segments(if you swap options 
    you will loose your current recordings)"
    android:layout_width="300dp"
    android:layout_height="wrap_content"/>

0

İşin püf noktası textView genişliğidir, aşağıdaki gibi özel bir sayı yapmaya çalışın:

<TextView
    android:layout_width="300dp"
    android:layout_height="wrap_content"/>

Birçok çözümü sonuçsuz denedim, denedim:

    android:ellipsize="none"
    android:scrollHorizontally="false"

Sarma seçeneğini tetikleyen tek şey, özel genişliktir


-1

TextView'unuzu aşağıdaki gibi bir ScrollView'a eklemeniz gerekir:

<ScrollView android:id="@+id/SCROLL_VIEW"  
android:layout_height="150px"   
android:layout_width="fill_parent">  

<TextView   
   android:id="@+id/TEXT_VIEW"   
   android:layout_height="wrap_content"   
   android:layout_width="wrap_content"   
   android:text="This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header" />  
 </ScrollView>

4
Cevabınız için teşekkür ederim Ama amacım metni satır uzunluğunu aştığında kaydırmak ve yatay bir kaydırıcı koymamak.
Sameer
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.