Android ограничивает длину текстового вида

116
5

У меня есть макет, содержащий два текстовых вида и кнопку изображения, как показано ниже.

textview1

Это код макета

<LinearLayout
android:id="@+id/llGlobalControl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/gc_background"
android:gravity="center"
android:padding="6dp" >

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:orientation="vertical"
android:weightSum="2" >

<TextView
android:id="@+id/tvGlobalControlTitle"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_weight="1"
android:text="Text View"
android:textColor="@color/green"
android:textStyle="bold" />

<TextView
android:id="@+id/tvGlobalControlArtist"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_weight="1"
android:text="Text View"
android:textColor="@color/green" />

</LinearLayout>

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="right"
android:orientation="vertical" >

<ImageButton
android:id="@+id/ibGlobalControlPlayPause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_pause_over_video" />
</LinearLayout>
</LinearLayout>

Моя проблема в том, что если текст в любом из текстовых представлений становится слишком длинным, кнопка "отталкивается", как показано на рисунке ниже.

enter image description here

Вместо этого мне хотелось бы, чтобы текст ограничивал текст, содержащий красную подчеркивание на рисунке ниже.

enter image description here

Как мне это сделать?

спросил(а) 2021-01-25T15:51:10+03:00 5 месяцев назад
1
Решение
77

Хитрость заключается в использовании android:ellipsize="end" и ограничить количество строк с помощью android:maxLines="1".

Кроме того, чтобы ваш ImageButton не отталкивался, самым простым способом является установка android:layout_weight="1" в LinearLayout с TextViews and android:layout_width="wrap_content" в LinearLayout, содержащий кнопку.

Это результат: enter image description here

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/llGlobalControl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/gc_background"
android:gravity="center"
android:padding="6dp" >

<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="left"
android:orientation="vertical"
android:layout_weight="1"
android:weightSum="2" >

<TextView
android:id="@+id/tvGlobalControlTitle"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_weight="1"
android:text="This is a long text that will take up a lot of space and push the button away"
android:maxLines="1"
android:ellipsize="end"
android:textColor="@color/green"
android:textStyle="bold" />

<TextView
android:id="@+id/tvGlobalControlArtist"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_weight="1"
android:text="Text View"
android:maxLines="1"
android:ellipsize="end"
android:textColor="@color/green" />

</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="right"
android:orientation="vertical" >

<ImageButton
android:id="@+id/ibGlobalControlPlayPause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_pause_over_video" />

</LinearLayout>

</LinearLayout>

ответил(а) 2021-01-25T15:51:10+03:00 5 месяцев назад
77

попробуй это

Добавить

android:ellipsize="end"
android:singleLine="true"

для TextView вы хотите быть одной строкой и с "..." в конце.

ответил(а) 2021-01-25T15:51:10+03:00 5 месяцев назад
77

попробуйте установить вместе с TextView


 android:ellipsize="end"
android:singleLine="true"

ответил(а) 2021-01-25T15:51:10+03:00 5 месяцев назад
64

попробуйте вот так,

<LinearLayout
android:id="@+id/llGlobalControl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/gc_background"
android:gravity="center"
android:padding="6dp" >

<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="left"
android:orientation="vertical"
android:weightSum="2" >

<TextView
android:id="@+id/tvGlobalControlTitle"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_weight="1"
android:text="Text View"
android:textColor="@color/green"
android:textStyle="bold" />

<TextView
android:id="@+id/tvGlobalControlArtist"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_weight="1"
android:text="Text View"
android:textColor="@color/green" />

</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="right"
android:orientation="vertical" >

<ImageButton
android:id="@+id/ibGlobalControlPlayPause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_pause_over_video" />
</LinearLayout>
</LinearLayout>

ответил(а) 2021-01-25T15:51:10+03:00 5 месяцев назад
45

Попробуйте использовать этот макет:

<RelativeLayout
android:id="@+id/llGlobalControl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/gc_background"
android:padding="6dp" >

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="2"
android:layout_toLeftOf="@id/ibGlobalControlPlayPause"
android:layout_toStartOf="@id/ibGlobalControlPlayPause" >

<TextView
android:id="@+id/tvGlobalControlTitle"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_weight="1"
android:text="Text View"
android:textColor="@color/green"
android:textStyle="bold"
android:singleLine="true"
android:ellipsize="end"
android:maxLines="1"/>

<TextView
android:id="@+id/tvGlobalControlArtist"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_weight="1"
android:text="Text View"
android:textColor="@color/green"
android:singleLine="true"
android:ellipsize="end"
android:maxLines="1" />

</LinearLayout>

<ImageButton
android:id="@+id/ibGlobalControlPlayPause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_action_pause_over_video" />

</RelativeLayout>

ответил(а) 2021-01-25T15:51:10+03:00 5 месяцев назад
44

Попробуйте этот путь. Добавлен вес к макету.

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="left"
android:layout_weight="1"
android:orientation="vertical"
android:weightSum="2" >

<TextView
android:id="@+id/tvGlobalControlTitle"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_weight="1"
android:text="Text View"
android:textColor="@color/green"
android:textStyle="bold" />

<TextView
android:id="@+id/tvGlobalControlArtist"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_weight="1"
android:text="Text View"
android:textColor="@color/green" />

</LinearLayout>

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="right"
android:layout_weight="3"
android:orientation="vertical" >

<ImageButton
android:id="@+id/ibGlobalControlPlayPause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_pause_over_video" />
</LinearLayout>

ответил(а) 2021-01-25T15:51:10+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема