我正在尝试创建一个如下所示的布局:
键入EditText中的单词,然后在AdapterView中动态解析并显示为自己的TextView。如果未在EditText中输入任何内容,则AdapterView也将为空。如果一行中的单词过多,则将它们添加到下一行。最后,您将获得填充适配器的TextViews的“砖墙”。
我很忙碌地寻找有关如何实现此外观的任何指南。我想在XML中定义尽可能多的东西。我正在设想这样的事情:
<!-- Activity.xml -->
<RelativeLayout>
<TextView>
<EditText>
<AdapterView>
</RelativeLayout>
但现有的适配器(ListView,GridView)都无法真正满足我在此所做的工作。
谁能给我一些例子来学习吗?
谢谢您的回答,但是我决定回答我自己的问题,因为还有一些我认为很重要的细节。
不幸的是,所有这些仍然不会产生我在原始问题中描述的外观。为此,我们将需要一个自定义的布局(我现在正在处理),但是如果不这样做,这将与我们将要达到的效果差不多。
本示例将向您展示如何使用自定义元素(在这种情况下为Text + Icon)填充GridView(AdapterView的类型)
主要活动的xml
<!-- Item.xml -->
<RelativeLayout>
<TextView>
<EditText>
<GridView>
</RelativeLayout>
将添加到适配器的项目的xml文件。
<!-- Item.xml -->
<RelativeLayout>
<TextView>
<ImageView>
</RelativeLayout>
自定义布局类,请在实施之前(仅在前10分钟左右)观看此视频:http : //www.youtube.com/watch?v=N6YdwzAvwOA
public class MyAdapter extends ArrayAdapter<Object> {
//members
public static class ViewHolder {
TextView tv;
ImageView iv;
}
private LayoutInflater m_Inflater;
private ArrayList<Object> m_UnderlyingData;
// context - context
// _resource - view defined in xml (will be added to adapter view)
// itemList - data to fit into view from resource
public MyAdapter(final Context _context, final int _resource, final ArrayList<Object> _itemList) {
super(_context, _resource, _itemList);
m_Inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
m_UnderlyingData = _itemList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder oHolder;
if(convertView == null){
convertView = m_Inflater.inflate(R.layout.word_item, null);
// -- remember views that make up the item layout
oHolder = new ViewHolder();
oHolder.tv = (TextView) convertView.findViewById(R.id.tv_word);
oHolder.iv = (ImageView) convertView.findViewById(R.id.iv_icon);
// -- reference to views that can be accessed outside of this class
convertView.setTag(oHolder);
}else{
oHolder = (ViewHolder) convertView.getTag();
}
//set new data
oHolder.tv.setText((String) m_UnderlyingData.get(position));
oHolder.iv.setImageResource(R.drawable.icon);
return convertView;
}
}
这是在活动中使用的代码:
GridView oWordGrid = (GridView) findViewById(R.id.myGrid);
ArrayList<Object> oArrayList = new ArrayList<Object>();
oArrayList.add("abc");
oArrayList.add("def");
oArrayList.add("blah");
ListAdapter myAdapter = new MyAdapter(this, R.layout.word_item, oArrayList);
oWordGrid.setAdapter(myAdapter);
这是一些更多的教育材料:
http : //www.youtube.com/watch ? v = wDBM6wVEO70
http://www.youtube.com/watch?v=NYtB6mlu7vA
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句