2012-05-01 96 views
4

我敢肯定,這是簡單的,我可以忽略但我無法弄清楚。我有一個ListView使用自定義適配器與簡單的佈局和我的填充值似乎被忽略。以下是我想要的佈局:Android ListView行佈局忽略填充

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/Widget.Layout.ComponentEntry" android:padding="@dimen/preferred_padding"> 
    <include layout="@layout/component_entry_summary" /> 
</LinearLayout> 

但是填充被忽略。如果我使用嵌套的LinearLayout,那麼它可以工作,但內部的LinearLayout似乎毫無意義。這個作品:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/Widget.Layout.ComponentEntry"> 
    <LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:padding="@dimen/preferred_padding"> 
     <include layout="@layout/component_entry_summary" /> 
    </LinearLayout> 
</LinearLayout> 

第一個佈局在ListView之外工作,所以我很難過。僅供參考這裏所使用的樣式(也指定填充):

<style name="Widget"> 
    <item name="android:textAppearance">@style/TextAppearance</item> 
</style> 

<style name="Widget.Layout"> 
    <!-- Empty Style --> 
</style> 

<style name="Widget.Layout.ListViewItem"> 
    <item name="android:background">@drawable/listview_item_background</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:padding">@dimen/preferred_padding</item> 
</style> 

<style name="Widget.Layout.ComponentEntry" parent="Widget.Layout.ListViewItem"> 
    <item name="android:layout_height">@dimen/listview_item_height</item> 
</style> 

和包含的佈局:

<merge xmlns:android="http://schemas.android.com/apk/res/android" > 
    <ImageView android:id="@+id/iconImage" 
       android:layout_gravity="center_vertical" 
       android:layout_height="@dimen/icon_size" 
       android:layout_width="@dimen/icon_size" 
       android:scaleType="fitCenter" 
       android:src="@drawable/ic_launcher" /> 

    <LinearLayout android:layout_gravity="center_vertical" 
        android:layout_height="wrap_content" 
        android:layout_width="0dp" 
        android:layout_weight="1" 
        android:paddingLeft="@dimen/preferred_padding" 
        android:orientation="vertical"> 

     <TextView android:id="@+id/topText" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:paddingLeft="@dimen/preferred_padding" 
        android:singleLine="true" 
        android:text="@string/app_name" 
        android:textColor="@color/header_text_enabled" 
        android:textStyle="bold" /> 

     <TextView android:id="@+id/bottomText" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:ellipsize="marquee" 
        android:marqueeRepeatLimit="marquee_forever" 
        android:paddingLeft="@dimen/preferred_padding" 
        android:singleLine="true" 
        android:text="@string/app_name" 
        android:textColor="@color/header_text_enabled" /> 
    </LinearLayout> 
</merge> 

這裏的佈局是如何膨脹(我原本是提供一個null父,並認爲是問題,但它似乎並不爲:。

public View getView(int position, View view, ViewGroup parent) { 
    ViewHolder viewHolder; 

    if (view == null) { 
     view = _layoutInflater.inflate(_layoutResourceId, parent, false); 
     ... 

回答

3

去除背景引起在外的LinearLayout填充開始工作,有沒有挖到爲什麼還沒有,但問題是(部分)解決。

+1

對我來說這是安卓4.1的問題,但它在奇巧和棒棒糖perfecly工作 – serine

5

我遇到了同樣的問題,當我刪除代碼來設置填充工作的背景。

編輯:發現是什麼導致它,它是9個補丁圖像中的填充線,我想如果您將它從圖形中刪除,它將使用佈局xml中的填充。但它實際上使用可拉伸區域作爲可繪製區域。

如果不包含填充行,Android會使用左邊和上邊的一行來定義這個可繪製區域,從而有效地定義填充。

http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch