Многострочный TextView в Android?

мне понравилось внизу в 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...

так что же я здесь делаю?

15 ответов


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

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

Я попытался прокомментировать один из ответов выше, но у меня недостаточно репутации.
Я просто подумал, что добавлю это, если вы используете:

android:inputType="textMultiLine"

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

на android:singleLine="false" работал отлично.


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

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

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


просто добавьте textview в 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>

просто поместите '\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"/> 

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


попробуйте работать с EditText, сделав его unclickable и unfocusable, также вы можете отобразить полосу прокрутки и удалить нижнюю панель 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 -->
/>  

надеюсь, что это помогает :)


что я узнал, так это добавить "\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 между 5 вечера и By позволил мне больше контролировать, где я хотел, чтобы моя следующая строка начиналась и заканчивалась.


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

android:inputType="textMultiLine"

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

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

это отлично работает.


Я:

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

это сработало для меня. 1-номер столбца.


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

Я поместил 4 textviews в вертикальный linearlayout.

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

Это решение подходит для случаев, когда текстовый вид текста постоянен, например метки.


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>

Почему бы вам не объявить строку вместо записи длинных строк в файл макета. Для этого вам нужно объявить строку кода в файл макета"android:text="@string/text " и перейти к \\app\src\main\res\values\strings.xml и добавьте строку кода "ваш многострочный текст здесь" также используйте "\n", чтобы разорвать строку из любой точки, иначе строка будет автоматически скорректирована.


TextView будет многострочным, когда он не получит достаточно места, чтобы поместиться в одной строке, а singLine не установлен в true.

Если он получает пространство в одной строке, оно не будет многострочным.