Ограничение ширины горизонтальной прокрутки Android с помощью вложенного TextView

Я написал приведенный ниже код для пользовательского адаптера представления списка. Это мой row_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">


<HorizontalScrollView
    android:layout_width="300dp"
    android:layout_height="24dp"
    android:id="@+id/horizontalScrollView">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="111111111111111111111111111111111111111111111111111111"
        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:scrollHorizontally="true"
        android:maxLines = "1"
        android:textSize="18sp" />

</HorizontalScrollView>



<TextView
    android:id="@+id/price"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/horizontalScrollView"
    android:layout_marginTop="5dp"
    android:text="$39.99"
    android:textColor="@android:color/black" />



<ImageView
    android:id="@+id/store"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_favorite_border_black_24dp"
    android:layout_centerVertical="true"
    android:layout_alignParentEnd="true"
    android:layout_marginEnd="16dp" />

</RelativeLayout>

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

Наглядное пособие

Однако, когда я запускаю приложение, текст появляется прямо поверх изображения.

Любые идеи о том, как это исправить?

Обновление 1: вот что я сейчас получаю:

Наглядное пособие


person Yamaha T64312    schedule 10.12.2016    source источник


Ответы (1)


Это связано с тем, что RelativeLayout помещает свой вид один поверх другого, когда вы прокручиваете HorizontalScrollView, вы фактически перерисовываете его, и он рисуется в верхней части ImageView.

Попробуйте заменить RelativeLayout на LinearLayout и посмотрите, исправлено ли это.

РЕДАКТИРОВАТЬ: я не видел изображение ниже. ну, это потому, что вы используете относительную компоновку, а ширина HorizontalScrollView равна match_parent, а представления перерисовываются друг над другом. Попробуйте использовать LinearLayout с шириной = 0 пикселей и весом = 1.

РЕДАКТИРОВАТЬ 2: Итак, вы хотите иметь Price - HorizontalScreenView - ImageView? Вот весь код, просто скопируйте и вставьте его.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">

<TextView
    android:id="@+id/price"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/horizontalScrollView"
    android:layout_marginTop="5dp"
    android:text="$39.99"
    android:textColor="@android:color/black" />

<HorizontalScrollView
    android:id="@+id/horizontalScrollView"
    android:layout_width="0px"
    android:layout_height="24dp"
    android:layout_weight="1">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:maxLines="1"
        android:scrollHorizontally="true"

        android:text="111111111111111111111111111111111111111111111111111111"
        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
        android:textSize="18sp" />

</HorizontalScrollView>


<ImageView
    android:id="@+id/store"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:src="@drawable/ic_favorite_border_black_24dp" />

</LinearLayout>
person Unique LoL Apps    schedule 10.12.2016
comment
^ См. обновление. И я хотел, чтобы цена была под заголовком и любимым значком рядом с текстом, линейная компоновка просто складывает их один над другим. его 300dp - person Yamaha T64312; 10.12.2016
comment
это простой дизайн, используйте LinearLayout в качестве корня с вертикальной ориентацией и добавьте сверху HorizontalScrollView, TextView и ImageView. Ваше здоровье - person Unique LoL Apps; 10.12.2016
comment
Мне нужно изображение рядом с заголовком *, а не текст цены. Извините за недопонимание. - person Yamaha T64312; 10.12.2016
comment
просто скопируйте и вставьте мое редактирование 2, если это так, или если вы хотите, чтобы цена была ниже заголовка, используйте основной LinearLayout как горизонтальный и добавьте HorizontalScrollView и ImageView в 1 LinearLayout аналогично. А затем добавьте Price TextView - person Unique LoL Apps; 10.12.2016
comment
я имею в виду основную вертикальную ориентацию и дочернюю горизонтальную, а после добавления текстового просмотра она будет ниже - person Unique LoL Apps; 10.12.2016
comment
Я предположил, что это то, что вы имели в виду :p Это сработало как шарм, спасибо! Пожалуйста, обновите код в своем редактировании для тех, кто хочет такого же результата :) - person Yamaha T64312; 10.12.2016