Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使两个动态文本视图不重叠_Java_Android - Fatal编程技术网

Java 使两个动态文本视图不重叠

Java 使两个动态文本视图不重叠,java,android,Java,Android,我一直在开发一个显示服务器状态的应用程序。每个服务器都有一个CardView,里面有一个RelativeView。左边是一个图像,与左边的卡片对齐。在中间,我有一个文本视图,与图像对齐。在右边,我有一个文本视图,与卡片的右边对齐 基本上,我的问题是,如果不使用LinearLayout,如何使中间的TextView不与正确的TextView重叠,最好是在布局的XML中?两个视图中的文本都是动态长文本,因此线性布局不是很理想 这是一个布局图,可以帮助你了解我在说什么。很抱歉,外部链接在文章中被重新格

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

基本上,我的问题是,如果不使用LinearLayout,如何使中间的TextView不与正确的TextView重叠,最好是在布局的XML中?两个视图中的文本都是动态长文本,因此线性布局不是很理想


这是一个布局图,可以帮助你了解我在说什么。很抱歉,外部链接在文章中被重新格式化。

1.将中间文本视图对齐到父级的中心水平,为其指定固定宽度、左右边距。使用layouttoleftof提到它是另一个文本视图的右侧。 2.使用alignRightToParent=true将右侧文本视图向右对齐。然后给它留左边距

我尝试使用以下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>

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

    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();

您可以将视图放置在
相对视图中(如果它们不在其中),然后使用
ToStartOf
ToEndOf
属性将其中一个视图与另一个视图的开始或结束对齐。您也可以使用
ToLeftOf
ToRightOf
,但不建议这样做,因为在某些地区,您希望用户从右到左而不是从左到右阅读。这将确保两个视图永远不会重叠(假设您没有在任何一个视图上放置负边距)。只要正确配置对齐属性,这可以扩展到任意多个视图。

可以为每个
TextView
定义固定宽度,或者,您可以参考以下内容:水平居中视图,并使用它作为文本视图的阈值使用LayoutToLeftof和LayoutToRightof来防止视图超过该阈值/重叠此方法使所有内容都居中于视图中,而不是它们的位置,如果中间文本视图中的文本大于1行,则将所有内容都弄乱。我已经给了这个答案2次,并且说它对我的应用程序不起作用。请不要重复回答,尤其是在它被证明是错误的之后。感谢您的帮助。这个答案可能与您收到的答案(和评论)相似,但不同。我只是告诉您,如果正确格式化XML,使用我(和其他人)提到的属性,并且使用相对布局作为父视图组,则不应该有重叠的视图。这可能意味着您必须更改XML的某些其他部分,但按照目前的措辞,我们所能做的就是向您指出一些可以防止布局重叠的内容。如果你想要新的答案,也许你应该发布你的XML。