2010-06-11 132 views
14

我從網站加載導航,其中每個項目都有標題,說明和圖像。我希望所有的標題和描述都集中在同一個軸上。將ImageView的最大寬度設置爲其父寬度的百分比

我在ListView中爲每個項目使用以下佈局。當圖像的寬度是高度的一半時,它可以正常工作,但如果寬度較大,則不會有效 - 文本位於圖像下方。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:orientation="horizontal"> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1"> 
      <TextView 
       android:layout_height="wrap_content" 
       android:textSize="10pt" 
       android:id="@+id/title" 
       android:gravity="center_horizontal" 
       android:layout_width="fill_parent" /> 
      <TextView 
       android:layout_height="wrap_content" 
       android:id="@+id/description" 
       android:layout_width="fill_parent" 
       android:gravity="center_horizontal" /> 
     </LinearLayout> 
     <View 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent" 
      android:layout_weight="3" /> 
    </LinearLayout> 
    <ImageView 
     android:id="@+id/icon" 
     android:adjustViewBounds="true" 
     android:layout_width="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:layout_height="wrap_content" /> 
</RelativeLayout> 

是否有可能迫使形象留在RelativeLayout的的寬度或更低的25%?

回答

15

這不能在XML中完成。你將不得不在代碼中指定大小。我會做的是,在活動的onCreate()

[編輯:增加進口,浮動符號]

import android.widget.LinearLayout.LayoutParams; 
... 
obj.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
            LayoutParams.WRAP_CONTENT, 
            0.25f)); 

這意味着使用父母的高度的100%,但母公司的寬度的25% 。

+0

我相信這必須是LinearLayout.LayoutParams,並且0.25必須是0.25f才能工作。 – thomas88wp 2012-12-27 17:33:32

+0

@ thomas88wp顯然這段代碼需要導入LinearLayout.LayoutParams。另外,由於小數點的原因,0.25和0.25f在Java中是一樣的。 – Emmanuel 2013-01-08 21:17:47

+4

抱歉,要點,但在Java'0.25'是一個雙重字面值,'0.25f'是一個浮點數字。如果一個參數需要一個浮點數(在這種情況下),如果您將其傳遞給double,它將不會編譯(儘管其他方式可以工作,因爲float可以隱式轉換爲double而不是反之亦然)。爲了演示,試着編譯'public void foo(float bar){foo(0.5); '' - 直到你添加'f'纔會起作用。 – thomas88wp 2013-01-20 18:59:53