Как остановить расширение TextView слишком далеко за пределы других элементов RelativeLayout? - PullRequest
2 голосов
/ 26 июня 2011

У меня есть TextView и ImageView в относительной компоновке:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingLeft="10dip" android:id="@+id/itemRoot"
    android:clickable="false">

    <TextView android:layout_width="wrap_content" android:text="TextView"
        android:layout_height="wrap_content" android:id="@+id/itemTxt"
        android:layout_alignParentLeft="true" android:layout_centerVertical="true"
        android:singleLine="true"></TextView>
    <ImageView android:id="@+id/delBtn" android:layout_height="wrap_content"
        android:src="@drawable/delete" android:layout_width="wrap_content"
        android:layout_alignParentRight="true" android:paddingRight="10dip"
        android:layout_centerVertical="true"></ImageView>

</RelativeLayout>

Однако, когда текст становится слишком длинным, он перекрывается с ImageView, проходит под ним до самого конца экрана, а затем "...". Но я хочу, чтобы он остановился там, где начинается ImageView. Я не могу растянуть TextView вплоть до ImageView, потому что у меня также есть несколько фонов, которые выглядят ужасно. Поэтому я попытался добавить пустую, прозрачную прокладку между двумя представлениями:

<TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/spacer"
        android:layout_alignTop="@+id/itemTxt" android:layout_alignBottom="@+id/itemTxt"
        android:layout_toLeftOf="@+id/delBtn" android:layout_toRightOf="@+id/itemTxt"
        android:minWidth="5dip" android:background="@android:color/transparent"></TextView>

Тем не менее, у меня все та же проблема. Проставка работает хорошо, пока текст не слишком длинный. Но поскольку itemTxt, определенный в отношении ParentLeft, он просто выталкивает проставку из экрана, и я не могу определить ее также в отношении проставки, поскольку SDK жалуется, что она круглая.

Есть мысли?

Alex

Ответы [ 4 ]

3 голосов
/ 26 июня 2011

Это то, что вы ищете?

Сохраняет текстовое представление над изображением:

 <TextView
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:ellipsize="end"
    android:text="BLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah"/>

Или вы имеете в виду рядом друг с другом?

Используйте линейный режимПланировка:

 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/itemRoot"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="10dip"
    android:orientation="horizontal"
    android:clickable="false">
    <TextView
        android:id="@+id/itemTxt"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="TextView"
        android:layout_height="wrap_content"
        android:singleLine="true"/>
    <ImageView
        android:id="@+id/delBtn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:paddingRight="10dip" 
        android:src="@drawable/delete"/>
</LinearLayout>
1 голос
/ 26 июня 2011

объявите ImageView перед TextView, чтобы его идентификатор уже был доступен, и добавьте следующий атрибут к элементу <TextView>: android:layout_toLeftOf="@id/delBtn"

0 голосов
/ 26 июля 2017

в относительном расположении такая проблема может быть решена путем фиксации конечной точки (справа, слева, сверху, справа) с использованием соответствующих атрибутов

, поскольку нам требуется ограничить ширину только так, чтобы конечные точки располагались как слева и справабудет достаточно, поэтому только два атрибута могут выполнять работу android:layout_toRightOf.android:layout_toLeftOf

так что если вы хотите textView с id = место между двумя View (TextView, ImageView или любой другой) id = интенсивность (слева) и id = время (справа) следующий код будет:

`<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/place"
        android:layout_toRightOf="@id/intensity"
        android:layout_toLeftOf="@id/time"
        android:text="hokage's house konoha hidden leaf village naruto universe "
        android:textStyle="bold"
        android:layout_below="@id/proximity"
        />`

код, указанный выше, дает нам: изображение с атрибутами ширины и большого текста

примечание , если используется только атрибут android:layout_toLeftOf, тогда тексты меньшего размера могут быть выровнены по правой стороне изображение только с одним атрибутом и мелким текстом "дом Хокаге"

, поэтому лучше использовать оба атрибута, что при использовании с маленьким текстом также дает превосходный результат

0 голосов
/ 25 мая 2014

Прежде всего, не рекомендуется использовать LinearLayout и веса вместо RelativeLayout, особенно в случае использования этого LinearLayout внутри ListView.И причина этого в том, что Android делает два прохода для рендеринга вашего LinearLayout, когда вы используете весовые коэффициенты.И этот факт может испортить производительность вашего ListView.Вместо использования весов вы должны объявить свой ImageView перед TextView в XML-макете, а затем добавить этот атрибут в TextView:

android:layout_toLeftOf="@id/delBtn"
...