2013-01-07 157 views
49

當我創建一個只包含ListView的簡單佈局時,最後一個項目後面沒有顯示分隔符,看起來有點難看。ListView的最後一項之後的分隔符(分隔符)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" /> 
</RelativeLayout> 

enter image description here

然而,我發現了一個分離器是最後一個項目後顯示如果我添加波紋管列表視圖另一個視圖,並設置爲ListView的android:layout_above屬性。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/bottom" 
     android:layout_alignParentTop="true" /> 

    <TextView 
     android:id="@+id/bottom" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:background="@android:color/holo_blue_dark" 
     android:text="Bottom" /> 
</RelativeLayout> 

enter image description here

爲什麼在列表視圖這樣的表現?我怎樣才能得到一個分隔符後,只包含一個列表視圖的佈局中的最後一項?

+0

*我怎樣才能在佈局的最後一個項目之後,分離只是一個包含listview?* - 如果你在佈局中只有一個'ListView',我認爲你可以總是(而且很容易)實現一個適配器,它增加了一個額外的空行來強制顯示目標分隔符。 – Luksprog

+0

這很有趣,但不會最後一項是可點擊的? – Natix

+0

如果覆蓋適配器的'isEnabled(position)'方法以返回空'最後位置的'false',則不適用。 – Luksprog

回答

94

答案很簡單:您應該在ListView中將android:layout_height="wrap_content"更改爲android:layout_height="match_parent"

你可能猜到爲什麼會發生這種情況。

+3

親愛的上帝,我不知道我怎麼能忽略這個... – Natix

+11

如果你有ListView下的內容呢?在我的情況下,我正在製作一個有幾個部分的導航抽屜。 – theblang

+0

你救了我。我從來不知道這件事。謝謝@Kzinch –

14

你試過這個嗎?

android:footerDividersEnabled="true" 

如果不嘗試了這一點

<View 
android:background="#00ff00" 
android:layout_width="fill_parent" 
android:layout_height="3dp" 
android:layout_alignParentLeft="true" 
android:layout_alignParentRight="true" 
android:layout_below="@+id/YOUR_LIST_ID" /> 
+1

這並沒有真正的幫助。根據http://developer.android.com/reference/android/widget/ListView.html#attr_android:footerDividersEnabled,默認值爲true。 – Natix

+0

好的,請嘗試我的編輯答案 – Gridtestmail

+0

嗯,這可能會起作用,但正如我已經評論過Appu的答案,這種顏色和尺寸猜測只是一種簡單的與其他分隔符不一致的黑客攻擊。如果我只比較你的和Appu的值,線的顏色和高度是非常不同的(並且可能沒有一個與默認分隔符的實際顏色和高度相同)。 – Natix

0

看來,當如果你喜歡這些代碼是顯示在您的列表視圖有所不同。但即使你也可以關注這一點。

首先定義一個名爲Line

<style name="Line"> 
    <item name="android:layout_width">fill_parent</item> 
    <item name="android:layout_height">2px</item> 
    <item name="android:background">@color/white</item> 
</style> 

//風格在上面的風格,你可以改變線的高度按照您的要求。

無論你想使用上面的行,你可以在你的xml文件中聲明它。

<LinearLayout 
android:orientation = "vertical" 
....................... 
............................> 
<ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     /> 


<View 
     style="@style/Line"/> 

</LinearLayout> 

上面的代碼在你的列表視圖下創建一行。當你想在你的項目的不同地方使用它時,上面的代碼是最有用的。或者如果只想在一個地方,你可以這樣做。

<LinearLayout 
    android:orientation = "vertical" 
    ....................... 
    ............................> 
    <ListView 
      android:id="@android:id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      /> 
<View 
    android:layout_width="fill_parent" 
     android:layout_height="1px" 
     android:background="#20b2aa" /> 

</LinearLayout> 

希望這會有所幫助。順便說一句,原因是模糊的,甚至一旦我找到了這個,我遵循了我上面解釋的這種方式。

+0

我很感謝你的努力,但這真的只是一個黑客。我不想猜測顏色,寬度等。它們需要與列表視圖中的其他分隔符相同 - 它們的外觀可以取決於應用程序的主題或整個設備。對一些隨機猜測的值進行硬編碼是下地獄的一種方式。必須有一些更習慣的解決方案,因爲最後一個分隔符自動出現在第二種情況下。 – Natix

+0

正如我在答覆中已經提到的那樣,原因不明,我搜索了很多次。希望有人能澄清這一點並給出明確的解決方案。 – Kanth

2

我已經找到了解決這個問題的方法。由於最後一個分隔符僅在列表視圖後面顯示另一個視圖時顯示,因此可以通過將其layout_height設置爲0dp來使該第二個視圖不可見。

它仍然是一個黑客,但它使最後的分隔線外觀一致,所以最好嘗試手動創建一個水平線,嘗試猜測正確的顏色和尺寸。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/invisible" 
     android:layout_alignParentTop="true" /> 

    <View 
     android:id="@+id/invisible" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_alignParentBottom="true" />  
</RelativeLayout> 
+2

如果你添加填充到你的列表視圖的底部,那也可以。我用:android:paddingBottom =「10dp」 – AndroidDev

1

我做類似於@Natix描述,但而不是用列表的含佈局我只需將空視圖通過ListView控件列表上的頁腳搞亂的東西。addFooterView()

7

添加一個空視圖頂部(和/或底部)上創建頂部(或底部)分頻器

myList.addHeaderView(new View(context)); 
myList.addFooterView(new View(context)); 
+0

這對我最合適,因爲我已將文體選項應用於列表視圖,我不必擔心匹配 – draksia