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