TextView растягивает и выводит другой вид за пределы экрана в горизонтальном линейном представлении

#android #android-layout

#Android #android-макет #android-layout

Вопрос:

У меня есть горизонталь LinearLayout с 2 элементами: a TextView и a RatingBar . Я хочу, чтобы RatingBar всегда было прямо справа от TextView . Но я хочу, чтобы TextView растягивался столько, сколько ему нужно, пока не останется места, затем я хочу, чтобы он добавлял строки.

Вот визуальное представление того, как это должно выглядеть, показывая текст разной ширины:

 | TextView - RatingView ------------- |

| TextViewTextView - RatingView ----- |

| TextViewTextViewTextVi - RatingView |
| ewTextViewTextView                  |
  

Однако RatingBar продолжает выталкиваться за пределы экрана по мере растягивания TextView. Это то, что он делает вместо этого:

 | TextView - RatingView ------------- |

| TextViewTextView - RatingView ----- |

| TextViewTextViewTextViewTextViewTex |
| tView                               |
  

Вот XML-файл:

 <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextViewTextViewTextViewTextViewTextViewTextViewTextView"
        android:id="@ id/titleTextView"
        android:textSize="15sp"
        android:textColor="@color/blue"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="8dp"
        android:layout_weight="1"/>

    <RatingBar
        android:layout_width="106dp"
        android:layout_height="20dp"
        android:id="@ id/ratingBar2"
        android:numStars="5"
        android:rating="0"
        style="@style/customRatingBar"
        android:layout_gravity="center_vertical"
        android:isIndicator="true" />

</LinearLayout>
  

Я пробовал добавлять layout_weight либо к одному виду, либо к обоим. Кажется, ничего не получается заставить работать. Должен ли я использовать RelativeLayout вместо этого? Я тоже не смог заставить это работать.

Ответ №1:

Это удивительно сложная задача! Как предлагает @zimeriljazia, RatingBar придерживаться вправо и TextView переносить влево легко с помощью RelativeLayout , для TextView просто alignParentRight и для использования панели оценок layout_toRightOf="@id/ratingbar" .

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

    <RatingBar
        android:id="@ id/ratingBar1"
        style="?android:attr/ratingBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"        
        android:numStars="5"
        android:rating="5" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/ratingBar1"
        android:text="@string/long" />

</RelativeLayout>
  

Если вы используете RatingBar только для отображения (не для ввода), то вы могли бы использовать TextView.setCompoundDrawables() или один из его двоюродных братьев. Отправьте null для всех, кроме правильного, и для этого программно установите свой рейтинг изображения. Однако вам нужно будет указать, layout_width чтобы быть wrap_content .

Комментарии:

1. Спасибо за подробный ответ. В итоге я просто использовал RelativeLayout, и панель рейтинга была установлена справа. Это не то, что показывает дизайн, но это лучшее, что я мог сделать. Если у меня будет больше времени, я мог бы попробовать ваше второе предложение. Спасибо!

2. Приятно слышать! Если вы чувствуете, что я ответил на ваш вопрос, продолжайте и отметьте мой ответ как ответ. 🙂

Ответ №2:

Попробуйте добавить 2 относительных макета, один для textview и один для ratingbar. Выровняйте макет панели оценок справа от экрана, затем создайте макет textview android:layout_toleft из панели оценок

Комментарии:

1. Это хорошая идея, но тогда RatingBar было бы застряло справа от экрана. Я хочу , чтобы он застрял до конца TextView . (Пока TextView не растянется слишком сильно)