Android:使用LayoutParams设置View对象的宽度

时间:2011-12-29 20:37:44

标签: android android-layout android-ui android-view layoutparams

我在我的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”。这是我得到的:

enter image description here

我尝试在我的View XML中使用“wrap_content”而不是“match_parent”,但这根本没有任何影响。知道为什么我的块会超出我希望扩展的宽度吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你看到截止圆圈因为(我想)绿色圆圈图像(jpg或png)的宽度大于20dp。如果要缩放绿色圆圈,请使用imageView并设置scaleType属性。

否则你会得到你想要的。通过强制圆视图为20dp,您将为块填充创建大量额外空间。正确设置圆宽或使用scaleType它将起作用。

顺便说一下,你可能不应该使用match_parent作为块的宽度(这意味着它将占据整个宽度,包括应该由圆圈占据的空间)。而是使用一些任意宽度(例如0dp)并将layout_weight设置为1.