android自定义带删除,全选的云标签

应公司需求要写个云标签,然后上网一搜,果然有demo,git链接AndroidTagView

效果还可以,不过呢,不满足需求,扩展性也不高,其实最重要的是代码太多,不如xml来的快.于是就进行一番改版,下面先上个图,没图也没人看了.



云标签网上也很多人写了,实现原理也不难,无非就是一个view继承ViewGroup然后拿到子控件,计算行数,子view宽度,不懂原理的可以看看源码或者看看自定义方面的资料。

上面的AndroidTagView中的Tag是一个自定义的标签,内容都是画上去的,太麻烦了,需求一变就得改源码,改参数,于是就把TagView换成了一根自定义的xml,以便于需求变化好更改,更改xml的代码如下

private void onAddTag(String text, intposition) {

if(position <0|| position >mChildViews.size()) {

return;

}

final View tagView = View.inflate(getContext(),R.layout.tag, null);

TextView      title = (TextView) tagView.findViewById(R.id.tag_name);

title.setText(text);

title.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if(tagListener!=null) {

intpos =mChildViews.indexOf(tagView);

tagListener.onTagClick(pos);

}

}

});

ImageView imgDelete= (ImageView) tagView.findViewById(R.id.delete);

if(mEnableCross){

imgDelete.setVisibility(VISIBLE);

}

imgDelete.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if(tagListener!=null) {

intpos =mChildViews.indexOf(tagView);

tagListener.removeTag(pos);

}

}

});

mChildViews.add(position,tagView);

if(position

for(inti = position;i

mChildViews.get(i).setTag(i);

selectMap.put(i, false);//设置全部反选

}

}else{

tagView.setTag(position);

}

addView(tagView,position);

}


看到上面的View.inflate(getContext(),R.layout.tag, null);这行了吧,目前还没有做很好的xml更换扩展,后面会做修改,本来想多贴点代码讲讲,突然发觉也没啥,都是些业务性的东西,那个标签位移的我删除了,因为一般标签的功能都用不到。好了,上demo地址,有需求的直接下载吧

云标签

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容