應(yīng)公司需求要寫個云標簽剪个,然后上網(wǎng)一搜秧骑,果然有demo,git鏈接AndroidTagView
效果還可以扣囊,不過呢乎折,不滿足需求,擴展性也不高侵歇,其實最重要的是代碼太多骂澄,不如xml來的快.于是就進行一番改版,下面先上個圖惕虑,沒圖也沒人看了.
云標簽網(wǎng)上也很多人寫了坟冲,實現(xiàn)原理也不難,無非就是一個view繼承ViewGroup然后拿到子控件溃蔫,計算行數(shù)健提,子view寬度,不懂原理的可以看看源碼或者看看自定義方面的資料伟叛。
上面的AndroidTagView中的Tag是一個自定義的標簽私痹,內(nèi)容都是畫上去的,太麻煩了统刮,需求一變就得改源碼紊遵,改參數(shù),于是就把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);//設(shè)置全部反選
}
}else{
tagView.setTag(position);
}
addView(tagView,position);
}
看到上面的View.inflate(getContext(),R.layout.tag, null);這行了吧暗膜,目前還沒有做很好的xml更換擴展,后面會做修改,本來想多貼點代碼講講鞭衩,突然發(fā)覺也沒啥学搜,都是些業(yè)務(wù)性的東西娃善,那個標簽位移的我刪除了,因為一般標簽的功能都用不到瑞佩。好了会放,上demo地址,有需求的直接下載吧