-2

我想GridView为 Android 创建一个自定义,该自定义始终在第一列中包含文本,并将其他列保留为图像。例如:

Text Text  Text 
Text Image Image
Text Image Image
Text Image Image
Text Image Image
     .....
     .....
Text Image Image

我不知道这是否可能。如果可能,我应该如何实施它?

4

2 回答 2

1

很有可能。您只需要考虑您想要做什么,它适用于何处,然后将代码添加到适当的区域。

例如:

第 1 步:计算/知道有多少列 通过适当的成员函数调用( GridView.getNumColumns - 注意您必须 >= API 级别 11 才能使用此调用)来获取GridView当前在运行时有 多少列。否则GridView.setNumColumns将需要在设置中完成。最后一个选项是确定列数应该是多少,并将其设置为或类似。onMeasureOverrides

第 2 步:编写您的 getView 代码 在您getView选择的适配器中的代码中,您应该能够进行简单的数学运算来确定要做什么。例如:

public View getView(int position, View convertView, ViewGroup parent) {
    // Either have numOfColumns saved as a global variable or get it here depending on your method

    // Create your view for the item
    View ret;

    if (position < numOfColumns || position % numOfColumns == 0) { 
        // Aka if first row OR if first column
        TextView tv = new TextView(mContext);

        // Do all your textview formatting etc etc....

        ret = tv;
    } else {
        ImageView iv = new ImageView(mContext);

        // Do all your imageview layout stuff etc etc....

        ret = iv;
    }

    return ret;
}

注意:这纯粹是您的头脑风暴/大声思考,让您开始。您缺少诸如(一种巧妙的内存优化方法,以回收具有不同类型的视图,Views如果您GridView将滚动)。您还可以考虑创建自定义布局并将其用作您的视图,并根据需要使用上述选择代码对其进行修改。

所以回答你的问题,的,这是可能的。

于 2012-07-23T02:35:22.740 回答
0

有关自定义网格视图,请参阅本教程

http://www.mkyong.com/android/android-gridview-example/

        gridView = (GridView) findViewById(R.id.gridView1);

        gridView.setAdapter(new ImageAdapter(this, MOBILE_OS));

        gridView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {
                Toast.makeText(
                   getApplicationContext(),
                   ((TextView) v.findViewById(R.id.grid_item_label))
                   .getText(), Toast.LENGTH_SHORT).show();

            }
        });




public class ImageAdapter extends BaseAdapter {
private Context context;
private final String[] mobileValues;

public ImageAdapter(Context context, String[] mobileValues) {
    this.context = context;
    this.mobileValues = mobileValues;
}

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

    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View gridView;

    if (convertView == null) {

        gridView = new View(context);

        // get layout from mobile.xml
        gridView = inflater.inflate(R.layout.mobile, null);

        // set value into textview
        TextView textView = (TextView) gridView
                .findViewById(R.id.grid_item_label);
        textView.setText(mobileValues[position]);

        // set image based on selected text
        ImageView imageView = (ImageView) gridView
                .findViewById(R.id.grid_item_image);

        String mobile = mobileValues[position];

        if (mobile.equals("Windows")) {
            imageView.setImageResource(R.drawable.windows_logo);
        } else if (mobile.equals("iOS")) {
            imageView.setImageResource(R.drawable.ios_logo);
        } else if (mobile.equals("Blackberry")) {
            imageView.setImageResource(R.drawable.blackberry_logo);
        } else {
            imageView.setImageResource(R.drawable.android_logo);
        }

    } else {
        gridView = (View) convertView;
    }

    return gridView;
}

@Override
public int getCount() {
    return mobileValues.length;
}

@Override
public Object getItem(int position) {
    return null;
}

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

}
于 2012-07-23T04:40:33.267 回答