我想要为Android创建自定义GridView
,该列表总是在第一列中包含文本并为其他图片保留其他格式。例如:创建一个自定义GridView,其中包含第一列中的文本和其他图像
Text Text Text
Text Image Image
Text Image Image
Text Image Image
Text Image Image
.....
.....
Text Image Image
我不知道这是否可行。如果可能的话,我应该如何实施它?
我想要为Android创建自定义GridView
,该列表总是在第一列中包含文本并为其他图片保留其他格式。例如:创建一个自定义GridView,其中包含第一列中的文本和其他图像
Text Text Text
Text Image Image
Text Image Image
Text Image Image
Text Image Image
.....
.....
Text Image Image
我不知道这是否可行。如果可能的话,我应该如何实施它?
很有可能。你只需要考虑你想要做什么,在哪里应用,然后将代码添加到适当的区域。
例如:
第1步:找出/知道有多少列 要么得到多少列你GridView
目前在通过适当的成员函数调用运行时(GridView.getNumColumns - 注意,您必须> = API级别11使用此调用)。否则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;
}
注:这是纯粹的只是你的头脑风暴/想大声为你做,让你开始。您错过了一些内容(如果您的GridView
将滚动,则可以使用不同类型的Views
回收视图进行优化)。您也可以考虑创建一个自定义布局,并将其作为您的视图并根据需要使用上面的选择代码进行修改。
所以回答你的问题,是的这是可能的。
感谢一个伟大的想法对我来说,我会尝试这个,但正如我看到它从你的解释似乎工作得很好。 – vhong 2012-07-23 03:02:49
请参阅本教程自定义网格视图
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;
}
}
你已经尝试过了,还是你希望有人给你完整的代码?如果GridView不起作用,则在以后的API版本中有GridLayout。 – wyoskibum 2012-07-23 02:32:20
我刚刚与网格一起工作,因此我在互联网上看到很多示例,只是展示了从布局中充气每个项目的自定义gridview。所以我为什么要问这个问题有一些想法。不要告诉我,我知道没有人会给我写一个完整的代码。 – vhong 2012-07-23 03:01:56
我可以问,为什么在这个问题上编辑了这个问题,彻底改变了问题的范围?我的答案现在甚至不适用,到目前为止它看起来完全错误。最初被问到的东西还剩下什么?有人问及如何创建一个具有特定布局的自定义GridView .... – 2012-07-23 04:59:47