2014-11-15 85 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