我在我的Android应用中使用了一个自定义宽度的UI元素。 UI元素本质上是具有两个绿色圆圈的块 - 块的左侧是一个圆,块的右侧是另一个圆。
我希望能够以编程方式设置整个UI元素的宽度。圆圈应始终具有恒定的大小,然后位于中间的块应调整其自身的大小以填充剩余的空间。
以下是我目前的情况:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<View
android:background="@drawable/green_circle"
android:id="@+id/left_green_circle"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
/>
<View
android:background="@drawable/blue_rectangle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
/>
<View
android:background="@drawable/green_circle"
android:id="@+id/right_green_circle"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
然后我在代码中设置View的布局参数,如下所示:
int layoutLeft = block_x_position - green_circle_width;
int layoutWidth = block_width + (green_circle_width * 2);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(layoutWidth, block_height);
layoutParams.setMargins(layoutLeft, block_y_position, 0, 0);
this.setLayoutParams(layoutParams);
this.requestLayout();
我在上面的代码中使用了RelativeLayout,因为整个View元素的父元素是RelativeLayout。不幸的是,我没有得到我期望的结果。我的“block_width”变量是“40dp”,而我的“green_circle_width”变量是“20dp”。这是我得到的:
我尝试在我的View XML中使用“wrap_content”而不是“match_parent”,但这根本没有任何影响。知道为什么我的块会超出我希望扩展的宽度吗?
感谢您的帮助。
答案 0 :(得分:1)
你看到截止圆圈因为(我想)绿色圆圈图像(jpg或png)的宽度大于20dp。如果要缩放绿色圆圈,请使用imageView并设置scaleType属性。
否则你会得到你想要的。通过强制圆视图为20dp,您将为块填充创建大量额外空间。正确设置圆宽或使用scaleType它将起作用。
顺便说一下,你可能不应该使用match_parent作为块的宽度(这意味着它将占据整个宽度,包括应该由圆圈占据的空间)。而是使用一些任意宽度(例如0dp)并将layout_weight设置为1.