Многострочный TextView в Android? - PullRequest
141 голосов
/ 13 июля 2011

Мне понравилось ниже 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>

Это не работает для multiline, и я использую TableLayout ...

так в чем же я здесь ошибаюсь?

Ответы [ 16 ]

184 голосов
/ 13 июля 2011

Если текст, который вы вводите в TextView, короткий, он не будет автоматически расширяться до четырех строк.Если вы хотите, чтобы от TextView до всегда имели четыре строки независимо от длины текста, установите атрибут android:lines:

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

Это можно сделать с помощью TableRow.см. ниже код

<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>
104 голосов
/ 27 января 2015

Я просто подумал, что добавлю это, если вы используете:

android:inputType="textMultiLine"

Тогда представление перестает быть кликабельным. Я пытался получить многострочные текстовые просмотры в меню слайдера, которые, очевидно, должны реагировать на нажатия.

Хотя android:singleLine="false" работал нормально.

29 голосов
/ 05 декабря 2013

Мне не нравится ни один из ответов.Просто установите inputType, и TextView адаптируется к его содержимому

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

Протестировано на Nexus One (2.3) и Nexus 4 (4.4)

10 голосов
/ 01 июля 2014

Просто добавьте текстовое представление в ScrollView

<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>
9 голосов
/ 08 августа 2015

Просто вставьте '\ n' внутри вашего текста ... никаких дополнительных атрибутов не требуется:)

          <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"/> 
5 голосов
/ 26 марта 2017

Попробуйте поработать с EditText, сделав его не щелкаемым и не сфокусированным, также вы можете отобразить полосу прокрутки и удалить нижнюю панель EditText.
Вот пример:

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

Надеюсь, это поможет:)

5 голосов
/ 15 ноября 2012

Мне не нравится решение, которое заставляет количество строк в текстовом представлении.Я скорее предлагаю вам решить это с помощью решения , предложенного здесь .Как я вижу, OP также борется с тем, чтобы текстовое представление выглядело как правильное в таблице, и shrinkColumns является правильной директивой, которую нужно передать для достижения желаемого.

3 голосов
/ 19 сентября 2017

Сначала замените "\n" на Html эквивалент "&lt;br&gt;" затем вызовите Html.fromHtml() в строке. Выполните следующие шаги:

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

Это прекрасно работает.

3 голосов
/ 15 июня 2017

Лучший ответ, который я нашел для многострочного TextView:

android:inputType="textMultiLine"
2 голосов
/ 21 января 2019

вы можете использовать Android: 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" />
...