2012-05-01 75 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