【Android】说做就做:带图标的list item
16lz
2021-01-25
阅读更多
这几天在搞带有icon的list item,但实现方法貌似很复杂,照着国外达人的一些code snippet也搞不定,他们也没把全部的code发出了,NND。。。怒!今天终于集众家之大成。。。搞定一个了。。。想想还是GWT好,一个composite widget就很轻松搞定了。。。Android目前还算是垃圾滴。。。
做个ImageItem class存放icon和text:
- public class ImageItem {
- private String text;
- private Drawable drawable;
- private boolean isSelectable = true;
- public ImageItem(String text, Drawable drawable) {
- super();
- this.text = text;
- this.drawable = drawable;
- }
然后做个View给这个composite view,这里extend了linearlayout,但你也可以使用其他的layout:
- public class ImageItemView extends LinearLayout {
- private TextView text;
- private ImageView image;
- public ImageItemView(Context context, String title, Drawable drawable) {
- super(context);
- this.setOrientation(HORIZONTAL);
- image = new ImageView(context);
- image.setImageDrawable(drawable);
- // 左,上,右,下
- image.setPadding(0, 2, 5, 2);
- //这里的layout一定要设置,不然无法显示,NND, 竟然default显示设置都没有!!
- addView(image, new LinearLayout.LayoutParams(
- LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
- text = new TextView(context);
- text.setText(title);
- addView(text, new LinearLayout.LayoutParams(
- LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
- }
接下来要做个Adapater给我们新建的composite view:
public class ImageItemArrayAdapter extends BaseAdapter {
private Context context;
private List
public ImageItemArrayAdapter(Context ctx) {
context = ctx;
items = new ArrayList
}
里面要实现getView这个method,这里return上面新建的ImageItemView:
- public View getView(int position, View convertView, ViewGroup parent) {
- ImageItemView iiv;
- if (convertView==null) {
- iiv = new ImageItemView(context, items.get(position).getText(), items.get(position).getDrawable());
- } else {
- iiv = (ImageItemView)convertView;
- iiv.setText(items.get(position).getText());
- iiv.setImage(items.get(position).getDrawable());
- }
- return iiv;
- }
最后用一个简单的ListActivity来demo下:
- public class ImageListItemDemo extends ListActivity {
- List
items; - @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- ImageItemArrayAdapter adapter = new ImageItemArrayAdapter(this);
- Resources res = this.getResources();
- adapter.addItem(new ImageItem("Home", res.getDrawable(R.drawable.sliderhouse)));
- adapter.addItem(new ImageItem("Bar", res.getDrawable(R.drawable.bar)));
- adapter.addItem(new ImageItem("Book Store", res.getDrawable(R.drawable.bookstore)));
- adapter.addItem(new ImageItem("Cafe", res.getDrawable(R.drawable.cafe)));
- adapter.addItem(new ImageItem("Drug Store", res.getDrawable(R.drawable.drugstore)));
- adapter.addItem(new ImageItem("Fitness Center", res.getDrawable(R.drawable.fitness)));
- adapter.addItem(new ImageItem("Grocery", res.getDrawable(R.drawable.grocery)));
- adapter.addItem(new ImageItem("Library", res.getDrawable(R.drawable.library)));
- adapter.addItem(new ImageItem("Movie Theatre", res.getDrawable(R.drawable.movietheater)));
- adapter.addItem(new ImageItem("Park", res.getDrawable(R.drawable.park)));
- adapter.addItem(new ImageItem("Restaurant", res.getDrawable(R.drawable.restaurant)));
- adapter.addItem(new ImageItem("Super Market", res.getDrawable(R.drawable.retail)));
- adapter.addItem(new ImageItem("School", res.getDrawable(R.drawable.school)));
- setListAdapter(adapter);
- }
请看截图,效果不错吧!这个实现我觉得应该在google android API缺省要直接提供,毕竟用到的情况很多很多。
- 查看图片附件
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 第一次使用Android(安卓)Studio时你应该知道的一切配置
- 把SVN项目存到码云,然后下载到Android(安卓)Studio进行代码改写
- Android(安卓)数字签名及命令行启动执行APK
- Android(安卓)应用广告过滤几种方式
- Android: Android(安卓)设计思想
- 处理Android文件访问问题。
- Android解决方案之:Android(安卓)Studio中Gradle的一些实例
- Android的Button按钮,ACTION_UP事件不触发解决方案