在最近的專案中需要實現行內標籤,我原來覺得挺簡單的後來,後來試了很多方式發現並沒有那麼簡單。比如想到的幾種實現方式和最終的效果如下圖,本著辛苦我乙個方便千萬家的思想,我把我的tagutil抽取出來了,並上傳到github上了。
1.首先需要乙個tag的布局檔案
2.手動的填充布局檔案,生成乙個textview
3.根據這個textview獲取它的截圖,生成乙個bitmap
4.將bitmap設定到需要顯示tag的textview上,這和textview中顯示表情的原理是一樣的。
**如下
package com.trs.nxnews.news.util;
import android.content.context;
import android.graphics.bitmap;
import android.graphics.canvas;
import android.graphics.paint;
import android.graphics.rect;
import android.graphics.drawable.bitmapdrawable;
import android.graphics.drawable.drawable;
import android.text.spannablestring;
import android.text.textutils;
import android.text.style.imagespan;
import android.view.layoutinflater;
import android.view.view;
import android.widget.textview;
import com.trs.nxnews.r;
import
static android.text.spanned.span_inclusive_exclusive;
/** * created by zhuguohui on 2016/12/12.
*/public
class
tagutil
//填充tag布局
textview tv_tag = (textview) layoutinflater.from(textview.getcontext()).inflate(r.layout.view_tag, null, true);
tv_tag.settext(tag);
//獲取view的截圖,用來當tag圖示
bitmap drawingcache = convertviewtobitmap(tv_tag);
//將設定到textview中
bitmapdrawable bitmapdrawable = new bitmapdrawable(drawingcache);
bitmapdrawable.setbounds(0, 0, drawingcache.getwidth(), drawingcache.getheight());
spannablestring spannablestring = new spannablestring(tag + textview.gettext());
myim imagespan = new myim(bitmapdrawable);
spannablestring.setspan(imagespan, 0, tag.length(), span_inclusive_exclusive);
textview.settext(spannablestring);
}/**
* 獲取tag圖示
**@param view
*@return
*/public
static bitmap convertviewtobitmap(view view)
/*** 可以居中對齊的imagespan
*/public
static
class
myim
extends
imagespan
public
myim(drawable drawable)
public
intgetsize(paint paint, charsequence text, int start, int end,
paint.fontmetricsint fm)
//15為padding
return rect.right + 15;
}@override
public
void
draw(canvas canvas, charsequence text, int start, int end,
float x, int top, int y, int bottom, paint paint) }}
tagdemo
有一些事情並沒有想象中那麼簡單,多積累一點一滴的技術,學會靈活運用技術,這樣開發才會越來越簡單,與君共勉。
塊級標籤,行內標籤,行內塊標籤
行內元素 塊標籤行內塊標籤 巢狀規則 塊級元素 獨佔一行,對寬高的屬性值生效 如果不給寬度,塊級元素就預設為瀏覽器的寬度,即就是100 寬 行內元素 可以多個標籤存在一行,對寬高屬性值不生效,完全靠內容撐開寬高!行內塊元素 結合的行內和塊級的優點,不僅可以對寬高屬性值生效,還可以多個標籤存在一行顯示...
塊狀標籤 行內標籤的區別
塊狀標籤行內標籤的區別 對於很多新人學習前端在html和css上面關於預設樣式了解不是很明白,我今天就來說下我的經驗。塊級標籤 標準盒子 1.預設寬度100 所在容器內容的寬度 獨佔一行,預設兩個 塊級標籤不能在同一行併排排列。2.可以給塊狀標籤設定寬高 width height 3.塊標籤可以設定...
前端之標籤分類塊標籤和行內標籤
一 塊級元素 1 塊級元素的特徵 1 塊級元素獨佔一行,之後的元素也只能另起一行,相鄰的兩個塊級元素不能共用一行。2 塊級元素其元素的高度,寬度,行高和頂部底部邊距都是可以設定的。3 元素的寬度如果不設定的話,預設為父元素的寬度。4 塊級元素對應的屬性為display block 2 常見塊級元素 ...