Багаторядковий TextView в Android?


154

Мені подобалося нижче в 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...

так яка помилка я роблю тут?

Відповіді:


197

Якщо текст, який ви вводите 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>

21
ОП не "хотіла, щоб у TextView завжди було чотири рядки незалежно від довжини тексту в ньому".
тар

7
Ця відповідь спрацювала на мене. Але я отримав найкращі результати, не з максимальними лініями та лініями, а з максимальними лініями та міні-лініями та не використовував лінії. Я встановлюю мінімальні значення 1 і максимальні значення перевищують найбільші дані. Таким чином я отримую від 1 до N рядків для компактного перегляду даних.
R Earle Harris

1
@REarleHarris: Я теж спробував те саме рішення, але проблема полягає в тому, що це не враховувати maxLines. Всі дані відображаються в кількості minLines. Що я можу зараз спробувати, я використовую спеціальний перегляд тексту у форматі xml
Sagar Devanga

119

Я просто думав, що додам це, якщо використовуєш:

android:inputType="textMultiLine"

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

Хоча android:singleLine="false"добре працював.


3
Це не зовсім правильно, оскільки власні помилки Android вказують на те, що ви можете використовувати цей атрибут лише з EditText, а не TextView.
Джаред

1
Ви посилаєтесь на textMultiline? Я сказав не використовувати це. SingleLine чудово в TextViews: developer.android.com/reference/android/widget/…
Райан

3
android: тепер застарілий singleLine
Умберто Кастаньеда

Ти впевнений? У ній не згадується, що в документах, на які я посилаюсь у вищенаведеному коментарі, хоча я щойно бачив, як це зазначено в таких документах. Дивно, що вони не згадують про це на сторінці TextView. Проблема полягає в тому, що рішення, яке вони пропонують (багаторядковий), перешкоджає перегляду подання, коли я поміщаю в свій ОП. developer.android.com/reference/android/R.attr.html#singleLine
Раян

3
android: singleLine = "false" застаріло, оскільки це значення за замовчуванням
Ashraf Alshahawy

28

Мені не подобається жодна з відповідей. Просто встановіть inputType і TextView адаптується до його вмісту

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

Тестовано на Nexus One (2.3) та Nexus 4 (4.4)


52
android: inputType = "textMultiLine" не для TextView, це для EditText, і ви отримаєте попередження, якщо спробуєте це зробити
bhaskarc

2
Вам слід прислухатися до попереджень. Використовуйте розчин @Ryans.
m02ph3u5

15

Просто введіть "\ 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"/> 

6
це рішення не можна використовувати для динамічного встановлення тексту
Sagar Devanga

@SagarDevanga Що означає динамічно встановлювати текст?
липня 1616

3
@SagarDevanga, я щойно перевірив, динамічні та статичні тексти мультилінізовані за замовчуванням (якщо вони використовуються \n), тож це правильне рішення. Ні singleLine=false, ні lines=4і так далі.
CoolMind

10

Просто додайте перегляд тексту в 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>

5

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


5

Спробуйте працювати з 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 -->
/>  

Сподіваюся, це допомагає :)


3

Спочатку замініть "\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()))

Це прекрасно працює.


2

Те, що я дізнався, - це додати "\ n" між словами, де ви хочете, щоб він перейшов у наступний рядок. Наприклад...

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

\ N між 17:00 та By дозволило мені більше контролювати, де я хотів, щоб мій наступний рядок починався та закінчувався.


2

Найкраща відповідь, яку я знайшов для багаторядкового TextView:

android:inputType="textMultiLine"

8
Це android:inputTypeатрибут <EditText>не для <TextView>?
тимтем

Якщо ви додасте цей атрибут до TextView, з’явиться попередження. - Атрибутивний андроїд: inputType = "textMultiLine" не слід використовувати з <TextView>. Насправді цей атрибут призначений для EditText.
Йондрі

2

ви можете використовувати 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" />

1
Це відображається як попередження. Не призначений для використання в TextView
Stealth Rabbi

1
inputType - це лише підтримка компонентів EditText.
Chamin Wickramarathna

1

Я використав:

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

це працювало для мене. 1 - номер стовпця.


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

Найпростіший спосіб

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

Використовуйте \nтам, де ви хочете вставити новий рядок. Сподіваємось, він вам допоможе


0

Ключ - це Textview, за допомогою singleline=falseякого (який так є застарілим, але його потрібно працювати) у поєднанні з lines, maxlinesабоminlines

<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

Чому б вам не оголосити рядок замість того, щоб записати довгі рядки у файл макета. Для цього вам слід оголосити рядок коду у файлі макета 'android: text = "@ string / text"' і перейти до \\ app \ src \ main \ res \ values ​​\ strings.xml та додати рядок коду 'Ваш багаторядковий текст тут' Також використовуйте '\ n', щоб перервати рядок з будь-якої іншої точки, лінія буде автоматично скоригована.


-4

для мене не з рішень не спрацювало. Я знаю, що це не повна відповідь на це питання, але іноді це може допомогти.

Я поклав 4 текстові огляди у вертикальний лінійний розклад.

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

Це рішення добре для випадків, коли текст перегляду тексту є постійним, як етикетки.


1
Будь ласка, не робіть цього.
humble_wolf

-23

TextView буде багаторядковою, коли у нього не буде достатньо місця для розміщення в одному рядку, а singLine не встановлено на значення true.

Якщо він отримує простір в одному рядку, він не буде багаторядковим.


7
Що робити, якщо я хочу використовувати fill_parent замість фіксованої ширини? Мій вміст скорочується, якщо я це роблю ...
happyhardik

6
Я спробую android:singleLine="false"або android:inputType="textMultiLine"(як описав Марагеус). Повідомлення, яке android:inputType="textMultiLine"має перевагу, коли є присутні обидва
Романтичний Електрон

Ділитися думками інших, хто коментував, це абсолютно неправильно, і я ошелешений, чому це прийнята відповідь.
Алекс Г
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.