2

我有一个UI元素,我正在使用具有自定义宽度的Android应用程序。 UI元素本质上是一个带有两个绿色圆圈的块 - 块左侧为一个圆圈,块右侧为另一个圆圈。Android:使用LayoutParams设置查看对象的宽度

我希望能够以编程方式设置整个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> 

我然后设置视图的布局参数,像这样的代码:

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

我一直在使用,而不是在我查看XML“match_parent”“WRAP_CONTENT”试过,但没有任何影响的。任何想法,为什么我的块越来越超出我希望它被扩展的宽度?

感谢您的任何帮助。

+0

如何将一些填充移到右侧? – bluejamesbond 2011-12-29 20:39:44

回答

1

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

否则,你正在得到你想要的。通过强制循环视图为20dp,您将为该块创建大量额外空间以填满。正确设置圆圈宽度或使用scaleType,它将起作用。另外,你可能不应该使用match_parent作为块的宽度(这意味着它将占据整个宽度,包括应该被圆圈占据的空间)。而是使用一些任意宽度(例如0dp)并将layout_weight设置为1.

+0

我更担心在矩形块中看到的额外宽度,而不是圆圈被切掉的事实。只是因为矩形块将它们推离测量宽度的边界而将圆圈切断。我只是想要蓝色块占据绿色圈子不占用的所有空间。 – David 2011-12-29 21:56:08

+0

对不起,还有一条评论:绿色圆圈不是图像。它们是单独定义的XML可绘制形状,定义如下: <梯度 机器人:角= “270” 机器人:startColor = “#82b446” 机器人:ENDCOLOR = “#658d47”/> <行程 机器人:宽度= “1DP”所以我独立地定义形状,然后我在之前发布的XML中使用该形状,并且我在那里给它一个大小。 – David 2011-12-29 22:02:39

+0

啊,明白了,谢谢你的纠正。您不希望将所有三个视图的布局权重都设置为1,这意味着您希望它们的宽度都相等。只需将块设置为1的layout_weight,并将圆圈设置为无重量的任意大小。尝试一下(并将块宽度设置为除fill_parent之外的其他值)。 – 2011-12-30 01:27:13