2012-03-15 180 views
0

我有自定義行的列表視圖。在該行有以下項目:在佈局中的Android中心textview

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="10dp" 
    android:layout_height="fill_parent" 
    android:focusable="false" 
    android:scaleType="fitXY"> 
    </ImageView>" 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/textsll" 
    android:layout_gravity="center_vertical" 
    android:gravity="center_vertical" 
    android:layout_marginLeft="5dp">   
    <TextView android:id="@+id/textView1" 
    android:layout_width="240dp" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentTop="true" 
    android:layout_centerVertical="true" 
    android:maxLines="1" 
    android:ellipsize="end">" 
    </TextView> 
    <TextView android:id="@+id/textView2" 
    android:layout_width="240dp" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:layout_alignParentBottom="true" 
    android:layout_below="@+id/textView1" 
    android:maxLines="1" 
    android:ellipsize="end"> 
    </TextView> 
    </RelativeLayout> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/textsll2" 
    android:layout_gravity="center_vertical|right" 
    android:layout_marginLeft="10dp">" 
    <TextView android:id="@+id/textView3" 
    android:layout_width="40dp" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:paddingBottom="5dp" 
    android:maxLines="1" 
    android:ellipsize="end" 
    android:gravity="center_vertical" 
    android:background="#87EB81"> 
    </TextView> 
    </LinearLayout> 

</LinearLayout> 

如果兩個textviews有一些內容,他們行(幾乎)在垂直居中。

但是,如果低的TextView是空的,我呼籲:

  holder.textView2.setVisibility(View.INVISIBLE); 
      holder.textView.setGravity(Gravity.CENTER_VERTICAL); 

儘管如此,上TextView的進入該行的頂部。爲什麼?

enter image description here

如果我將其設置爲View.GONE,我得到這個,但我不想讓行的高度發生變化:

enter image description here

+0

然後給出具體的高度,以您的相對佈局,讓你的TextView GONE – 2012-03-15 11:20:06

+0

看我更新的答案。希望這會幫助你.. – user370305 2012-03-16 09:34:46

回答

0

更新:

RelativeLayout中,視圖與其父項,RelativeLayout本身或其他視圖對齊。例如,我們宣佈說明與RelativeLayout的底部對齊,並且標題位於說明的上方並錨定在父級的頂部。使用描述GONE時,RelativeLayout不知道標題底邊的位置。要解決此問題,可以使用稱爲layout_alignWithParentIfMissing的非常特殊的佈局參數。

這個boolean參數只是簡單地告訴RelativeLayout當約束目標丟失時使用它自己的邊作爲錨。例如,如果您將視圖放在GONE視圖的右側並將alignWithParentIfMissing設置爲true,則RelativeLayout將改爲將視圖錨定到其左邊緣。在我們的例子中,使用alignWithParentIfMissing將導致RelativeLayout將標題的底部與其底部對齊。

對於在Layout Tricks: Creating Efficient Layouts

+0

我明白,harc代碼是唯一的方法。當我設置它時,第二個textview消失... – erdomester 2012-03-15 11:41:27

0

嘗試解決一些價值,您的的RelativeLayout的高度喜歡 -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/textsll" 
android:layout_gravity="center_vertical" 
android:gravity="center_vertical" 
android:layout_marginLeft="5dp">  
+0

這就是我寫的我已經完成 – erdomester 2012-03-15 11:13:49

0

更看這可以通過使用layout_centerInParent建立layout_belowlayout_above與上級路線的幫助你RelativeLayout可能與設定值比較layout_centerHorizontal

希望,這真將工作。

0

嘗試使用:

<TextView 
     ... 
     android:layout_height="?android:attr/listPreferredItemHeight" 
     ... 
     /> 
在your_list_item.xml

。並使用View.GONE

+0

這導致非常高的行數。我知道這個屬性,但它不在這裏工作 – erdomester 2012-03-15 11:29:53

0

要解決您的問題,你可以做的是有LinearLayout填充父。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

並使用View.GONE這將使行高度相同。

如果你看到世界上最好的汽車之後的差距,然後嘗試使用相對佈局,並將最後的佈局對齊底部。

1

使用android:layout_weight將主LinearLayout的所有子元素設置爲相同。

使用LinearLayout作爲textView1和textView2的父項。使用使用android:layout_weight爲每個人使用相同的尺寸。

定義TextView與android:gravity="center_vertical|left"然後,如果您不想顯示第二個TextView,請將其可見性設置爲View.GONE

也許這將解決您的問題,