3

我从这里实现了一个包含 2 种行的列表视图listViews with multiple rows tutorial

一切正常,

我现在遇到的问题是设置行的高度,

如果我将背景保留为颜色,一切都很好,

但是如果我使用图像作为背景,我只会得到一个高行[在其他简单列表视图中,高度尊重以编程方式设置的高度],但在这种情况下,行会发生变化

所以

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/category_item_row"
  android:orientation="horizontal" 
  android:layout_width="fill_parent"
  android:background="#ff00ff"
  android:layout_height="70dp"
  android:padding="3dp"
 >

<ImageView
 android:id="@+id/image"
 android:layout_width="40dp"
 android:layout_height="70dp"
 android:gravity="center_vertical"/>

<TextView
 android:id="@+id/title"
 android:textSize="20sp"
 android:layout_width="90dp"
 android:layout_height="70dp"
 android:gravity="center_vertical"/>
</LinearLayout>

工作正常,

android:background="@drawable/phone_cat_cell">

不尊重指定的高度,

如何使用我的图像背景修复这个高度?

谢谢!

编辑1,适配器

listViewItem.setAdapter(new PhoneItemAdapter(new ItemPhoneDataSource().getItems()));

private class PhoneItemAdapter extends BaseAdapter {  
    final List<RowPhone> rows;//row

    //data source, style
    PhoneItemAdapter(List<ItemPhone> animals) {
        rows = new ArrayList<RowPhone>();//member variable

        //choose cell! iterator
        for (ItemPhone item : animals) {
            //if it has an image, use an ImageRow
            if (item.getImageId() != null) {
                rows.add(new RowFolderPhone(LayoutInflater.from(getActivity()), item)); //imageRow!
            } else {//otherwise use a DescriptionRow

                rows.add(new RowItemPhone(LayoutInflater.from(getActivity()), item));                   
            }
        }
    }

    //delegate
    @Override
    public int getViewTypeCount() {
        return RowTypePhone.values().length;
    }

    @Override
    public int getItemViewType(int position) {
        //con cast
        return ((RowPhone) rows.get(position)).getViewType();

    }

    public int getCount() {
        return rows.size();
    }

    public Object getItem(int position) {
        return position;
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {

        //cambiado con cast!
        return ((RowPhone) rows.get(position)).getView(convertView);
    }
   }
4

3 回答 3

3

检查您的适配器代码,如果您在膨胀视图时传递 null,请用此代码替换该代码。

view = inflater.inflate(R.layout.listview_row, parent, false);
于 2013-09-19T05:49:56.493 回答
2

您只需要制作不是静态图像,而是“9patch”图像。所有安卓版本都支持。看看这里http://developer.android.com/tools/help/draw9patch.html

于 2013-09-19T05:34:57.787 回答
2

尝试这个:

<ImageView
android:id="@+id/image"
android:layout_width="40dp"
android:layout_height="70dp"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:gravity="center_vertical"/>
于 2013-09-19T05:54:58.900 回答