您好,登錄后才能下訂單哦!
這篇文章主要介紹“Android開發怎么實現在TextView前面加標簽”,在日常操作中,相信很多人在Android開發怎么實現在TextView前面加標簽問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Android開發怎么實現在TextView前面加標簽”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
public class TagTextView extends AppCompatTextView { private View view;//標簽布局的最外層布局 private Context mContext; private TextView tv_tag; private StringBuffer content_buffer; //必須重寫所有的構造器,否則可能會出現無法inflate布局的錯誤! public TagTextView(Context context) { super(context); mContext = context; } public TagTextView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; } public TagTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mContext = context; } public void setContentAndTag(String content, List<String> tags) { content_buffer = new StringBuffer(); for (String item : tags) {//將每個tag的內容添加到content后邊,之后將用drawable替代這些tag所占的位置 content_buffer.append(item); } content_buffer.append(content); SpannableString spannableString = new SpannableString(content_buffer); for (int i = 0; i < tags.size(); i++) { String item = tags.get(i); View view = LayoutInflater.from(mContext).inflate(R.layout.layout_texttab, null);//R.layout.tag是每個標簽的布局 tv_tag = view.findViewById(R.id.tv_tag); tv_tag.setText(item); Bitmap bitmap = convertViewToBitmap(view); Drawable d = new BitmapDrawable(bitmap); d.setBounds(0, 0, tv_tag.getWidth(), tv_tag.getHeight());//缺少這句的話,不會報錯,但是圖片不回顯示 ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);//圖片將對齊底部邊線 int startIndex; int endIndex; startIndex = getLastLength(tags, i ); endIndex = startIndex + item.length(); Log.e("tag", "the start is" + startIndex + "the end is" + endIndex); spannableString.setSpan(span, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } setText(spannableString); setGravity(Gravity.CENTER_VERTICAL); } private static Bitmap convertViewToBitmap(View view) { view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap; } private int getLastLength(List<String> list, int maxLength) { int length = 0; for (int i = 0; i < maxLength; i++) { length += list.get(i).length(); } return length; } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_tag" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginBottom="2dp" android:layout_marginRight="5dp" android:background="@drawable/round_blue" android:gravity="center_vertical" android:paddingBottom="2dp" android:paddingLeft="3dp" android:paddingRight="3dp" android:text="標簽" android:textColor="@android:color/white" android:textSize="12sp"/> </LinearLayout>
<com.zc.tool.TagTextView android:id="@+id/text_tab" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="12dp" android:textColor="@color/white" android:gravity="center" />
List<String> tags = new ArrayList<>(); tags.add("@用戶"); tags.add("@程序猿"); tags.add("@產品經理"); textTab.setContentAndTag("改個需求", tags);
到此,關于“Android開發怎么實現在TextView前面加標簽”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。