我有一个Android ListView,我希望包含一行TextView
带文字(titleTextView
)的行,我想要左边(leftCellBorder
)和右边(rightCellBorder
)边框图像,它被拉伸以填充行的高度。
行的高度取决于titleTextView
中的文字数量。如果文本溢出到第二行,则应垂直拉伸两个边框以填充边框的高度。
因此,对于单行文本,行视图应如下所示:
使用两行文本,行视图应如下所示:
我的XML的第一个版本是这样的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/leftCellBorder"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_gravity="fill_vertical"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/cell_border_left" />
<TextView
android:id="@+id/titleTextView"
android:layout_width="210dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center"
android:text="Title"
android:textSize="30dp" />
<ImageView
android:id="@+id/rightCellBorder"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/cell_border_right" />
</RelativeLayout>
我认为将leftCellBorder
和rightCellBorder
的{{1}}设为layout_height
就足以确保它们被拉伸到正确的高度,但这并不是'我的工作和结果如下:
即。图像没有被拉伸以填满高度。
然后我回去尝试在根部使用水平match_parent
而不是LinearLayout
并且有3个子视图。这实际上是有效的,并且左右边界被适当地拉伸以填充高度,但是我遇到的问题是似乎没有办法将RelativeLayout
夹在右侧用rightCellBorder
(除非我遗漏了什么)。
那么 - 我怎样才能达到我想要的效果呢?我希望坚持LinearLayout
,因为这给了我更大的灵活性。当然这应该不会那么困难!
答案 0 :(得分:1)
如果您想坚持使用RelativeLayout
将ImageViews的属性更改为:
android:layout_height="wrap_content"
android:layout_alignTop="@+id/titleTextView"
android:layout_alignBottom="@+id/titleTextView"
并移除alignParentTop
,alignParentBottom
和layout_gravity
。
答案 1 :(得分:1)
线性布局绝对是您设计的更好的布局选择(并且渲染速度更快)。您只需要使用layout_weight属性。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/leftCellBorder"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/cell_border_left" />
<TextView
android:id="@+id/titleTextView"
android:layout_width="0dp" <!-- When assigning a weight, either the width or the height will be inferred from the weight depending upon your layouts orientation. Whichever will be inferred should be set to 0dp, it's more efficient. -->
android:layout_height="wrap_content"
android:layout_weight="1" <!-- If only one child has weight, it occupies all the remaining space. (As with real children.) -->
android:gravity="center"
android:text="Lorem Ipsum Dolor Sit Amet Consecteteur Adipiscing Elit"
android:textSize="30dp" />
<ImageView
android:id="@+id/rightCellBorder"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/cell_border_right" />
</LinearLayout>
编辑: 然而,最简单的解决方案是为您的背景绘制创建一个9补丁,抛弃ImageView并将其应用到TextView;你可以简单地使用填充来确保文本保留在透明部分......就像这样:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="20dp" <!-- Use the padding to space the text from your sides -->
android:paddingRight="20dp"
android:background="@drawable/YOUR_9_PATCH"
android:gravity="center"
android:text="Lorem Ipsum Dolor Sit Amet Consecteteur Adipiscing Elit"
android:textSize="30dp" />
</LinearLayout>
如果你想要/需要TextView之外但在周围元素之前的空间,你可以在布局上使用填充......
答案 2 :(得分:0)
返回LinearLayout并尝试:
<ImageView
.
.
android:layout_weight="0"
>
<TextView
.
.
android:layout_weight="1"
>
<ImageView
.
.
android:layout_weight="0"
>
(确保所有视图上的android:layout_width =“wrap_content”)