2014-11-15 40 views
0

我一直在使用ListView项底部多余的空白处理一些麻烦。与标有红色箭头的白色/负空间例如在http://i.stack.imgur.com/wpm7a.png删除多余的ListView项底部的空白处

这里是我的布局XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.thereversecookbook.ResultsList" > 

    <ListView 
     android:id="@+id/results_list_lv" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" > 
    </ListView> 

</RelativeLayout> 

而我的列表项XML:

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

    <!-- cooking time --> 

    <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:clickable="false" 
     android:longClickable="false" 
     android:paddingBottom="50dp" 
     android:textColor="#CC0033" 
     android:textSize="16sp" /> 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/title" 
     android:layout_centerVertical="true" 
     android:clickable="false" 
     android:longClickable="false" 
     android:maxHeight="50dp" 
     android:maxWidth="50dp" 
     android:src="@drawable/ic_clock" /> 

    <TextView 
     android:id="@+id/desc" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@+id/icon" 
     android:layout_centerVertical="true" 
     android:clickable="false" 
     android:longClickable="false" 
     android:textColor="#3399FF" 
     android:textSize="14sp" /> 

    <RatingBar 
     android:id="@+id/ratingBar1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:clickable="false" 
     android:isIndicator="true" 
     android:longClickable="false" 
     android:scaleX="0.5" 
     android:scaleY="0.5"/> 

</RelativeLayout> 

而且CustomListAdapter:

public class CustomListViewAdapter extends ArrayAdapter<RowItem> { 

    Context context; 

    public CustomListViewAdapter(Context context, int resourceId, List<RowItem> items) { 
     super(context, resourceId, items); 
     this.context = context; 
    } 

    /*private view holder class*/ 
    private class ViewHolder { 
     ImageView imageView; 
     TextView txtTitle; 
     TextView txtCookingTime; 
     RatingBar ratingBar; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     RowItem rowItem = getItem(position); 

     LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.list_item, null); 
      holder = new ViewHolder(); 
      holder.txtCookingTime = (TextView) convertView.findViewById(R.id.desc); 
      holder.txtTitle = (TextView) convertView.findViewById(R.id.title); 
      holder.imageView = (ImageView) convertView.findViewById(R.id.icon); 
      holder.ratingBar = (RatingBar) convertView.findViewById(R.id.ratingBar1); 
      convertView.setTag(holder); 
     } else 
      holder = (ViewHolder) convertView.getTag(); 

     holder.txtCookingTime.setText(rowItem.getCookingTime()); 
     holder.txtTitle.setText(rowItem.getTitle()); 
     //holder.imageView.setImageResource(rowItem.getImageId()); 
     holder.ratingBar.setRating(rowItem.getRating()); 
     holder.ratingBar.setStepSize((float)0.5); 

     return convertView; 
    } 
} 

任何人有任何想法可能会导致此?非常感谢!

+0

你是否在你的'ListAdapter'中自己膨胀这个布局?如果是,请发布您的代码。 – CommonsWare

+0

有亚去@CommonsWare! –

+0

@JustinFlowers你的'ic_clock'可绘制的尺寸是多少? –

回答

4
convertView = mInflater.inflate(R.layout.list_item, null); 

Bzzzt。不要使用那个方法inflate()。你想使用三参数版本,传递你的convertView(“膨胀的小部件最终会是这个...的小孩)”和false(“...但不要让它们成为它的孩子马上“):

convertView = mInflater.inflate(R.layout.list_item, parent, false); 

这是你的情况尤为重要,因为RelativeLayout会很奇怪,如果这是你的布局文件的根容器,你使用这个版本的inflate()方法。

你可以在Dave Smith's "Layout Inflation as Intended" blog post了解更多。

+1

谢谢你的快速回复!添加了您的更改,并且对'android:layout_etc'的修改最终开始在我的list_item.xml中工作。我会记住下次我收到ListViews的空白问题。再次感谢! –

+1

对不起,为了清晰起见,我使用了'convertView = mInflater.inflate(R.layout.list_item,parent,false);'但是我认为这就是你的意思,从博客文章 –

+0

@JustinFlowers:对不起,在那里犯了一个错误。我编辑了匹配的答案。 – CommonsWare