应公司需求要写个云标签,然后上网一搜,果然有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地址,有需求的直接下载吧