行內標籤的實現

2021-07-26 06:28:30 字數 2653 閱讀 6369

在最近的專案中需要實現行內標籤,我原來覺得挺簡單的後來,後來試了很多方式發現並沒有那麼簡單。比如想到的幾種實現方式和最終的效果如下圖,本著辛苦我乙個方便千萬家的思想,我把我的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 常見塊級元素 ...