diff --git a/library/src/main/java/com/cunoraz/tagview/Tag.java b/library/src/main/java/com/cunoraz/tagview/Tag.java index 036f143..43a9ba3 100644 --- a/library/src/main/java/com/cunoraz/tagview/Tag.java +++ b/library/src/main/java/com/cunoraz/tagview/Tag.java @@ -1,12 +1,13 @@ package com.cunoraz.tagview; import android.graphics.drawable.Drawable; +import android.text.SpannableString; public class Tag { private int id; - private String text; + private SpannableString spannableText; private int tagTextColor; private float tagTextSize; private int layoutColor; @@ -22,16 +23,24 @@ public class Tag { public Tag(String text) { - init(0, text, Constants.DEFAULT_TAG_TEXT_COLOR, Constants.DEFAULT_TAG_TEXT_SIZE, Constants.DEFAULT_TAG_LAYOUT_COLOR, Constants.DEFAULT_TAG_LAYOUT_COLOR_PRESS, + initWithSpannable(new SpannableString(text)); + } + + public Tag(SpannableString spannableText) { + initWithSpannable(spannableText); + } + + private void initWithSpannable(SpannableString spannableText) { + init(0, spannableText, Constants.DEFAULT_TAG_TEXT_COLOR, Constants.DEFAULT_TAG_TEXT_SIZE, Constants.DEFAULT_TAG_LAYOUT_COLOR, Constants.DEFAULT_TAG_LAYOUT_COLOR_PRESS, Constants.DEFAULT_TAG_IS_DELETABLE, Constants.DEFAULT_TAG_DELETE_INDICATOR_COLOR, Constants.DEFAULT_TAG_DELETE_INDICATOR_SIZE, Constants.DEFAULT_TAG_RADIUS, Constants.DEFAULT_TAG_DELETE_ICON, Constants.DEFAULT_TAG_LAYOUT_BORDER_SIZE, Constants.DEFAULT_TAG_LAYOUT_BORDER_COLOR); } - private void init(int id, String text, int tagTextColor, float tagTextSize, + private void init(int id, SpannableString spannableText, int tagTextColor, float tagTextSize, int layoutColor, int layoutColorPress, boolean isDeletable, int deleteIndicatorColor,float deleteIndicatorSize, float radius, String deleteIcon, float layoutBorderSize, int layoutBorderColor) { this.id = id; - this.text = text; + this.spannableText = spannableText; this.tagTextColor = tagTextColor; this.tagTextSize = tagTextSize; this.layoutColor = layoutColor; @@ -94,7 +103,11 @@ public void setBackground(Drawable background) { } public String getText() { - return text; + return spannableText.toString(); + } + + public SpannableString getSpannableText() { + return spannableText; } public int getTagTextColor() { diff --git a/library/src/main/java/com/cunoraz/tagview/TagView.java b/library/src/main/java/com/cunoraz/tagview/TagView.java index 9c9ec0b..6ac8cf3 100644 --- a/library/src/main/java/com/cunoraz/tagview/TagView.java +++ b/library/src/main/java/com/cunoraz/tagview/TagView.java @@ -189,7 +189,7 @@ private void drawTags() { // tag text TextView tagView = (TextView) tagLayout.findViewById(R.id.tv_tag_item_contain); - tagView.setText(tag.getText()); + tagView.setText(tag.getSpannableText()); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tagView.getLayoutParams(); params.setMargins(textPaddingLeft, textPaddingTop, textPaddingRight, textPaddingBottom); tagView.setLayoutParams(params); @@ -216,7 +216,7 @@ public boolean onLongClick(View v) { }); // calculate of tag layout width - float tagWidth = tagView.getPaint().measureText(tag.getText()) + textPaddingLeft + textPaddingRight; + float tagWidth = Utils.calculateSpannableWidth(tag.getSpannableText(), tagView.getPaint()) + textPaddingLeft + textPaddingRight; // tagView padding (left & right) // deletable text diff --git a/library/src/main/java/com/cunoraz/tagview/Utils.java b/library/src/main/java/com/cunoraz/tagview/Utils.java index ae11f09..394442e 100644 --- a/library/src/main/java/com/cunoraz/tagview/Utils.java +++ b/library/src/main/java/com/cunoraz/tagview/Utils.java @@ -1,6 +1,9 @@ package com.cunoraz.tagview; import android.content.Context; +import android.text.SpannableString; +import android.text.StaticLayout; +import android.text.TextPaint; import android.util.DisplayMetrics; import android.util.TypedValue; @@ -14,4 +17,24 @@ public static int dipToPx(Context c,float dipValue) { DisplayMetrics metrics = c.getResources().getDisplayMetrics(); return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics); } + + public static float calculateSpannableWidth(SpannableString spannableText, TextPaint paint) { + StaticLayout tempLayout = new StaticLayout( + spannableText, + paint, + 10000, + android.text.Layout.Alignment.ALIGN_NORMAL, + 1f, + 0f, + false + ); + int lineCount = tempLayout.getLineCount(); + float textWidth = 0; + + for (int i = 0; i < lineCount; i++) { + textWidth += tempLayout.getLineWidth(i); + } + + return textWidth; + } }