使2个动态TextView不重叠

时间:2015-06-19 17:19:58

标签: java android

我一直在开发一个显示服务器状态的应用。我有一个每个服务器的CardView,里面有一个RelativeView。左边是一张图像,与左边的卡片对齐。在中间,我有一个TextView,与图像右边对齐。在右侧,我有一个TextView,与卡片右侧对齐。

基本上,我的问题是,如果不使用LinearLayout,我怎样才能使它中间TextView不与右侧TextView重叠,最好是在布局的XML中?两个视图中的文本动态很长,使得LinearLayout不是很好。

Here是一个布局图,可以帮助您描绘我正在谈论的内容。对不起外部链接,它正在帖子中重新格式化。

3 个答案:

答案 0 :(得分:0)

1.将中间TextView设置为父级的centerHorizo​​ntal,给出固定宽度,左右边距。通过使用layout_toLeftOf提到它是另一个TextView的权限。 2.也可以使用alignRightToParent = true将右侧的TextView调到右侧。然后给它左边距。

我尝试使用以下xml代码:

 <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="250dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="@+id/sun"
    android:background="#004700" >

    <TextView
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginRight="20dp"
        android:layout_toLeftOf="@+id/sun12"
        android:singleLine="false"
        android:text="abcdgsss ssssssssssssssss ssssssss sssssssssssssssssssssss"
        android:textColor="#fff"
        android:textSize="16sp" />

    <TextView
         android :id="@+id/sun12"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:text="abcdgsss ssssssssssssssss ssssssss sssssssssssssssssssssss"
        android:textColor="#fff"
        android:textSize="16sp" >
    </TextView>
</RelativeLayout>

答案 1 :(得分:0)

我想出了如何以编程方式进行。简单地说,您希望从容器视图的大小中减去周围视图的宽度和填充,并将剩余值设置为文本视图的宽度。这是一个例子:

    int view_length = personViewHolder.container.getWidth() - personViewHolder.container.getPaddingStart() - personViewHolder.container.getPaddingEnd();
    view_length = view_length - personViewHolder.object_to_left.getWidth() - personViewHolder.object_to_left.getPaddingStart() -personViewHolder.object_to_left.getPaddingEnd();
    view_length = view_length - personViewHolder.object_to_right.getWidth() - personViewHolder.object_to_right.getPaddingStart() - personViewHolder.object_to_right.getPaddingEnd();
    personViewHolder.view_to_set_width.getLayoutParams().width = view_length;
    personViewHolder.view_to_set_width.invalidate();

答案 2 :(得分:0)

您可以将视图放在var loadImage = function(imgSrc, callback) { var imgEl; var image = new Image(); image.src = imgSrc; image.onload = function() { imgEl = $('<img src='+image.src+'/>'); imgEl.prependTo(modal); } callback(imgEl); } var resizeModal = function(imgEl) { // Do stuff based off the imgEl once it's been loaded and appended var width = imgEl.width(); modal.width(width) return width; // or whatever you are trying to get from this. } var finalOutput = loadImage(imgSrc, resizeModal); 中(如果它们不在一个中),然后使用RelativeLayoutToStartOf属性将其中一个与开头或另一个结束。您也可以使用ToEndOfToLeftOf,但不建议这样做,因为在某些区域设置中,您希望用户从右向左而不是从左向右阅读。这将确保两个视图永远不会重叠(假设您没有在任一视图上放置负边距)。只要您正确配置其对齐属性,就可以将其扩展为任意数量的视图。