Как нарисовать вертикальную линию внутри расширяемого содержимого RelativeLayout - PullRequest
2 голосов
/ 21 августа 2011

Я сталкиваюсь с проблемой рисования вертикальной линии внутри относительного макета в виде макета элемента списка следующим образом:

list view item layout, what do i whant

высота макета изменяется от элемента к элементу, вот код:

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

<Button android:id="@+id/button1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentTop="true" 
        android:layout_alignParentLeft="true" 
        android:layout_marginLeft="3dip" 
        android:layout_marginTop="3dip" 
        android:text="Button"></Button>

<TextView android:id="@+id/title" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_alignTop="@+id/button1" 
          android:layout_toRightOf="@+id/button1"
          android:textAppearance="?android:attr/textAppearanceMedium"
          android:textColor="@color/black" 
          android:text="TextView"></TextView>

<TextView android:id="@+id/expandable_text" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_below="@+id/title" 
          android:layout_toRightOf="@+id/button1"
          android:textAppearance="?android:attr/textAppearanceSmall"
          android:textColor="@color/black" 
          android:text="Some expandable text"></TextView>

<View android:id="@+id/vertical_line"
      android:layout_width="5dip" 
      android:layout_height="fill_parent"
      android:layout_alignParentRight="true"
      android:layout_marginRight="4dip"
      android:background="@color/orange"/>

</RelativeLayout>

Проблема в том, что вертикальная линия не видна / не работает, есть предложения?
Заранее спасибо!

p.s
обратите внимание, что эта проблема была решена при работе с LinearLayout, но у меня были проблемы с производительностью из-за вложенных представлений в макете, и единственное решение заключается в использовании RelativeLayout, также строки TextViews меняются от элемента к элементу.

Решение № 1
После поиска и использования предложенных ответов, опубликованных здесь (спасибо ..)
Я нашел решение, , которое кажется довольно уродливым , но из-за проблем с заполнением
RelativeLayout, использующий высоту «fill_parent», в то время как сама высота макета устанавливается на «wrap_content», кажется разумным вариантом.

Идея состоит в том, чтобы взять самый верхний вид (кнопка) и самый нижний вид (расширяемый текст) и использовать их в качестве привязок для выравнивания по высоте вертикальной линии.
как вы можете видеть в этом коде:

<?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:background="@color/white">

<Button android:id="@+id/button1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentTop="true" 
        android:layout_alignParentLeft="true" 
        android:paddingTop="3dip" 
        android:layout_marginTop="3dip" 
        android:text="Button"></Button>

<TextView android:id="@+id/title" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_alignTop="@+id/button1" 
          android:layout_toRightOf="@+id/button1"
          android:paddingTop="3dip"
          android:textAppearance="?android:attr/textAppearanceMedium"
          android:textColor="@color/black" 
          android:text="TextView"></TextView>

<TextView android:id="@+id/expandable_text" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_below="@+id/title" 
          android:layout_toRightOf="@+id/button1"
          android:paddingBottom="10dip"
          android:textAppearance="?android:attr/textAppearanceSmall"
          android:textColor="@color/black" 
          android:text="Some expandable text"></TextView>

<View android:id="@+id/vertical_line"
      android:layout_width="5dip" 
      android:layout_height="fill_parent"
      android:layout_alignParentRight="true"
      android:layout_alignTop="@id/list_item_task_statusbutton"
      android:layout_alignBottom="@id/list_item_task_description"
      android:layout_marginRight="4dip"
      android:background="@color/orange"/>

</RelativeLayout>    

Обратите внимание на изменения в представлениях, особенно на замену "android: marginXXXX = value" с "android: paddingXXXX = value" для фиксации позиций видов.

Спасибо .. и хорошего дня!

Ответы [ 4 ]

1 голос
/ 09 августа 2013

Хорошо, у меня была та же проблема, и мне потребовался час, чтобы выяснить это.Вы должны положить свой RelativeLayout в LinearLayout.Таким образом, ваш код должен выглядеть следующим образом.

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

 <LinearLayout
    android:layout_height="fill_parent"
    android:layout_width="fill_parent">
    <View
    android:id="@+id/drawerVerticalLine"
    android:layout_width="10dip"
    android:layout_height="fill_parent"
    android:background="#7fa9c5"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white">
         <Button android:id="@+id/button1" 
               android:layout_width="wrap_content" 
               android:layout_height="wrap_content" 
               android:layout_alignParentTop="true" 
               android:layout_alignParentLeft="true" 
               android:paddingTop="3dip" 
               android:layout_marginTop="3dip" 
               android:text="Button"></Button>
        ...
      </RelativeLayout>
 </LinearLayout>
</LinearLayout>

И, добавив или выровняв drawerVerticalLine, вы получите желаемый результат.

0 голосов
/ 21 августа 2011

Используйте android:layout_alignParentTop="true" и android:layout_alignParentBottom="true", чтобы увеличить размер макета.android:orientation не используется RelativeLayout и будет игнорироваться.

0 голосов
/ 22 августа 2011

Как логика. Вы можете использовать TableLayout, и в этом вы можете использовать представление для разделения каждой строки горизонтальной линией. , , Для получения дополнительной информации и Tablelayout см. Это: Нажмите меня

0 голосов
/ 21 августа 2011

Удалите строку android:orientation="vertical" из тега RelativeLayout.Тогда я думаю, что линия должна быть видимой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...