我想GridView
为 Android 创建一个自定义,该自定义始终在第一列中包含文本,并将其他列保留为图像。例如:
Text Text Text
Text Image Image
Text Image Image
Text Image Image
Text Image Image
.....
.....
Text Image Image
我不知道这是否可能。如果可能,我应该如何实施它?
我想GridView
为 Android 创建一个自定义,该自定义始终在第一列中包含文本,并将其他列保留为图像。例如:
Text Text Text
Text Image Image
Text Image Image
Text Image Image
Text Image Image
.....
.....
Text Image Image
我不知道这是否可能。如果可能,我应该如何实施它?
很有可能。您只需要考虑您想要做什么,它适用于何处,然后将代码添加到适当的区域。
例如:
第 1 步:计算/知道有多少列 通过适当的成员函数调用( GridView.getNumColumns - 注意您必须 >= API 级别 11 才能使用此调用)来获取GridView
当前在运行时有
多少列。否则GridView.setNumColumns将需要在设置中完成。最后一个选项是确定列数应该是多少,并将其设置为或类似。onMeasure
Overrides
第 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
将滚动)。您还可以考虑创建自定义布局并将其用作您的视图,并根据需要使用上述选择代码对其进行修改。
所以回答你的问题,是的,这是可能的。
有关自定义网格视图,请参阅本教程
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;
}
}