2015-05-09 116 views
3

我想创建一个ListView,其中每行都有一个矩形图像和一些文本。就像这样:enter image description here自定义ListView其中所有图像具有相同尺寸

,我有是一些图像的高度大于宽度更高,然后ListView看起来像这样的问题:enter image description here

这是我的实际代码:

XML布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="5dp" 
    android:id="@+id/resultItem"> 
<ImageView 
    android:id="@+id/spicture" 
    android:layout_width="97dp" 
    android:layout_height="60dp" 
    android:layout_marginBottom="3dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="10dp" 
    android:adjustViewBounds="true" 
    android:layout_marginTop="3dp" > 
</ImageView> 
<TextView 
     android:id="@+id/sname" 
     style="@android:style/TextAppearance.Large" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

而且自定义适配器看起来是这样的:

public class ListViewAdapter extends BaseAdapter { 
    private final Context mContext; 
    private ArrayList<Integer> imageId; 
    private ArrayList<String> textStr; 
    private final LayoutInflater inflater; 

    private static class ViewHolder { 
     ImageView imgView; 
     TextView txtView; 
    } 

    public ListViewAdapter(Context c) { 
     mContext = c; 
     inflater = LayoutInflater.from(mContext); 
    } 

    @Override 
    public int getCount() { 
     return imageId.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return textStr.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 


    /** 
    * Rep per parametre un array amb els identificadors de les imatges i els 
    * string dels textes a mostrar 
    * 
    * @param idImages 
    * @param strText 
    */ 
    public void setData(ArrayList<String> strText, ArrayList<Integer> idImages) { 
     imageId = idImages; 
     textStr = strText; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.result_item, null); 
      holder.imgView = (ImageView) convertView.findViewById(R.id.spicture); 
      holder.txtView = (TextView) convertView.findViewById(R.id.sname); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromResource(mContext.getResources(), imageId.get(position), 50, 50); 
     holder.imgView.setImageBitmap(bitmap); 
     holder.txtView.setText(textStr.get(position)); 
     holder.txtView.setGravity(Gravity.CENTER); 
     return convertView; 
    } 
} 

如何让所有图像具有相同大小的矩形?

+0

你可以用'weights'弗尔双方的ImageView和TextView的。给他们一个** 1 **(两者)的重量和两个宽度= ** 0dp **。所以,他们都会采用'物品宽度的50%'。 –

回答

3

您可以在设置为listViewItem之前裁剪图像。或者你只是使用具有相同比例的图像。

但我假设你正在寻找一个更简单的解决方案。只需添加scaleType="centerCrop"

<ImageView 
    android:id="@+id/spicture" 
    android:scaleType="centerCrop" 
    android:layout_width="97dp" 
    android:layout_height="60dp" 
    android:layout_marginBottom="3dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="10dp" 
    android:adjustViewBounds="true" 
    android:layout_marginTop="3dp" > 

你可以找到这里的scaleTypes的更多信息:http://www.techrepublic.com/article/clear-up-ambiguity-about-android-image-view-scale-types-with-this-guide/

fitXY将扩展它适合,但原来的比例会迷路。

+0

这解决了我的问题,谢谢。我也会看看网页。谢谢! – jordiPons

2

使用此android:scaleType="fitXY"ImageView试试下面的代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="5dp" 
    android:id="@+id/resultItem"> 
<ImageView 
    android:id="@+id/spicture" 
    android:layout_width="97dp" 
    android:layout_height="60dp" 
    android:layout_marginBottom="3dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="10dp" 
    android:adjustViewBounds="true" 
    android:layout_marginTop="3dp" > 
</ImageView> 
<TextView 
     android:id="@+id/sname" 
     style="@android:style/TextAppearance.Large" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 
+0

该解决方案有效,谢谢。但是,正如它说fitXY的其他答案适合它,但原来的比例会丢失。谢谢。 – jordiPons

相关问题