#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
не растянется слишком сильно)