我一直在开发一个显示服务器状态的应用。我有一个每个服务器的CardView,里面有一个RelativeView。左边是一张图像,与左边的卡片对齐。在中间,我有一个TextView,与图像右边对齐。在右侧,我有一个TextView,与卡片右侧对齐。
基本上,我的问题是,如果不使用LinearLayout,我怎样才能使它中间TextView不与右侧TextView重叠,最好是在布局的XML中?两个视图中的文本动态很长,使得LinearLayout不是很好。
Here是一个布局图,可以帮助您描绘我正在谈论的内容。对不起外部链接,它正在帖子中重新格式化。
答案 0 :(得分:0)
1.将中间TextView设置为父级的centerHorizontal,给出固定宽度,左右边距。通过使用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);
中(如果它们不在一个中),然后使用RelativeLayout
或ToStartOf
属性将其中一个与开头或另一个结束。您也可以使用ToEndOf
或ToLeftOf
,但不建议这样做,因为在某些区域设置中,您希望用户从右向左而不是从左向右阅读。这将确保两个视图永远不会重叠(假设您没有在任一视图上放置负边距)。只要您正确配置其对齐属性,就可以将其扩展为任意数量的视图。