2015-05-09 119 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

相關問題