Элемент списка Android: TextView слева, изображение справа - PullRequest
11 голосов
/ 05 декабря 2010

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

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" 
              android:layout_width="fill_parent" android:layout_height="50px" android:layout_gravity="center_vertical">
  <!-- item -->
  <TextView android:id="@+id/txtItem" android:gravity="center_vertical" android:textSize="20px" android:layout_width="fill_parent" 
            android:layout_height="fill_parent"/>

  <!-- disclosure image -->
  <ImageView android:layout_gravity="right|center_vertical" android:src="@drawable/common_icon_arrow_disclosure" 
              android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</LinearLayout>

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


РЕДАКТИРОВАТЬ: для пояснения, это то, что я пытаюсь сделать:

alt text

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

Ответы [ 6 ]

25 голосов
/ 07 августа 2013

Вы также можете просто добавить объект рисования в текстовое представление, например так.

9 голосов
/ 04 января 2012

Вы можете использовать растровое рисование следующим образом (это также добавляет закругленные углы):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <solid android:color="@android:color/white" />
            <stroke
                android:width="2dp"
                android:color="#adadad"
            />
            <corners android:radius="5dp" />
        </shape>
    </item>
    <item android:right="5dp"
        android:top="2dp"
        android:bottom="2dp">
        <bitmap
            android:src="@drawable/image"
            android:gravity="right"
        />
    </item>
</layer-list>

и поместите этот объект рисования в фоновое свойство вашего TextView:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/right_image"
    android:text="some text"
    />
1 голос
/ 18 января 2012

Выровняйте текст по левому краю с родителем и установите гравитацию изображения вправо:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="48dp">

  <TextView
  android:id="@+id/team_member_name"
  android:layout_width="wrap_content"
  android:layout_height="fill_parent"
  android:layout_alignParentLeft="true"
  android:gravity="center_vertical"
  android:singleLine="true"/>

  <ImageView
  android:id="@+id/team_member_icon"
  android:layout_alignParentRight="true"
  android:layout_width="wrap_content"
  android:layout_height="fill_parent"
  android:layout_gravity="right"
  android:layout_marginLeft="8dp"
  android:layout_marginRight="8dp"
  android:src="@drawable/circle_green"/>

</RelativeLayout>
0 голосов
/ 11 июня 2012

Похоже, что есть какая-то ошибка макета или около того.Если TextView имеет флаг fill_parent, ImageView будет отодвинут от макета, даже если содержимое TextView достаточно мало.

0 голосов
/ 07 февраля 2012

Это сработало для меня:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

    <TextView android:id="@+id/date"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:layout_marginRight="10dp"
    android:textSize="16sp"
    android:textColor="@color/text_color"
    android:layout_alignParentLeft="true"
    android:gravity="center_vertical"/>

    <ImageView android:id="@+id/imageBtn"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:contentDescription="@string/delete"
    android:src="@drawable/delete_minus_png"
    android:layout_alignParentRight="true" />

</RelativeLayout>

Линия Android: layout_marginRight = "10dp" сделали свое дело.

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

0 голосов
/ 05 декабря 2010

Относительный макет - это то, что вы хотите.В вашем случае атрибут fill_parent заставлял текстовое представление выталкивать изображение с экрана.Если вы используете Относительный макет и задаете текстовое представление для использования layout_toLeftOf, оно должно работать.

Вот быстрый пример, который, я думаю, будет работать (я не проверял его, и он из памяти, но идея заключается в том,есть) ...

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
                android:layout_width="fill_parent" 
                android:layout_height="50px"
                android:layout_gravity="center_vertical">
  <ImageView android:id="@+id/img"
             android:layout_gravity="right|center_vertical"
             android:src="@drawable/common_icon_arrow_disclosure" 
             android:layout_width="wrap_content" 
             android:layout_height="wrap_content"/>

  <TextView android:id="@+id/txtItem"
            android:gravity="center_vertical"
            android:textSize="20px"
            android:layout_width="wrap_content" 
            android:layout_height="fill_parent"
            android:layout_toLeftOf="@id/img" />
</RelativeLayout>
...