Почему два элемента в одном и том же относительном макете расположены по-разному?

#android #android-relativelayout

#Android #android-relativelayout

Вопрос:

У меня есть listview с элементом, указанным RelativeLayout

Есть изображение (серая стрелка, это png, с прозрачным заполнением). В первом случае текст с синей обратной стороной перекрывает это изображение, во втором — оно выровнено. Единственное различие между этими случаями заключается в том, что в первом случае левая фотография невидима. Я не понимаю, почему во втором случае синий текст не перекрывает серую стрелку? (это желательное поведение)

 <?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:padding="@dimen/padding_content">
  <ru.ip_news.ui.views.RationalImage
    android:id="@ id/picture"
    android:layout_width="@dimen/article_short_image_width"
    android:layout_height="fill_parent"/>
  <View
    android:id="@ id/separator"
    android:layout_width="@dimen/padding_content"
    android:layout_height="fill_parent"
    android:layout_toRightOf="@id/picture"/>
  <ImageView
    android:id="@ id/dis_ind"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:src="@drawable/dis_ind"/>   
  <TextView
    android:id="@ id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/separator"
    android:layout_toLeftOf="@id/dis_ind"
    android:layout_gravity="left"
    android:textStyle="bold"
    android:textColor="@color/article_text_main"
    android:maxLines="2"
    android:ellipsize="end"
    android:background="#F0F0"/>
  <TextView
    android:id="@ id/description"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/separator"
    android:layout_below="@id/title"
    android:layout_alignParentBottom="true"
    android:textColor="@color/article_text_secondary"
    android:maxLines="4"
    android:background="#F00F"/>
</RelativeLayout>
  

введите описание изображения здесь

Ответ №1:

Я никогда раньше не работал с кодированием Android, но, просто взглянув на ваш код, я бы сказал, что существует конфликт между android:layout_alignParentRight="true" найденным здесь:

 <ImageView
    android:id="@ id/dis_ind"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:src="@drawable/dis_ind"/> 
  

и ваш android:layout_alignParentBottom="true" найден здесь:

   <TextView
    android:id="@ id/description"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/separator"
    android:layout_below="@id/title"
    android:layout_alignParentBottom="true"
    android:textColor="@color/article_text_secondary"
    android:maxLines="4"
    android:background="#F00F"/>
  

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

Ответ №2:

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

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

1. Обратите внимание, что желателен первый вариант. Таким образом, добавление поля не сработает.

Ответ №3:

Решена проблема путем извлечения linearlayout и перемещения в него фотографии. По какой-то причине эта фотография в том же макете содержит пробелы между текстами.

 <?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:padding="@dimen/padding_content">
    <ru.ip_news.ui.views.RationalImage
        android:id="@ id/picture"
        android:layout_width="@dimen/article_short_image_width"
        android:layout_height="fill_parent"/>
    <RelativeLayout   
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:paddingLeft="@dimen/padding_content">
      <ImageView
        android:id="@ id/dis_ind"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:src="@drawable/dis_ind"/>   
      <TextView
        android:id="@ id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/dis_ind"
        android:layout_gravity="left"
        android:layout_alignParentLeft="true"
        android:textStyle="bold"
        android:textColor="@color/article_text_main"
        android:maxLines="2"
        android:ellipsize="end"/>
      <TextView
        android:id="@ id/description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/title"
        android:layout_alignParentBottom="true"
        android:textColor="@color/article_text_secondary"
        android:maxLines="4"/>
    </RelativeLayout>
</LinearLayout>