private SpannableString applyLetterSpacing(String text) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
builder.append(text.charat(i));
if (i + 1 < text.length() && !isEmojiCharacter(text.charat(i))) {//avoid adding the blank code between the emoji code
builder.append("\u00A0");
}
}
SpannableString finalText = new SpannableString(builder.toString());
if (builder.toString().length() > 1) {
for (int i = 1; i < builder.toString().length(); i += 2) {
if (builder.toString().tochararray()[i] == 160) {//avoid breaking emoji code,u00A0 is text space
finalText.setSpan(new ScaleXSpan((mLetterSpace + 1) / 10),i,i + 1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
return finalText;
}
项目:OSchina_resources_android
文件:TweetQueueAdapter.java
@SuppressWarnings("unused")
public void bind(int position,TweetPublishModel model,RequestManager loader) {
itemView.setTag(model);
Context context = itemView.getContext();
Spannable spannable = TweetParser.getInstance().parse(context,model.getContent());
mTitle.setText(spannable);
mTitle.setMovementMethod(LinkMovementMethod.getInstance());
mTitle.setFocusable(false);
mTitle.setdispatchToParent(true);
mTitle.setLongClickable(false);
mLog.setText(String.format("Error:%s.",model.getErrorString() == null ? "null" : model.getErrorString()));
mDate.setText(FORMAT.format(new Date(model.getDate())));
}
项目:RLibrary
文件:RExTextView.java
/**
* 检查当前位置是否命中在spannable上,如果是,返回spannable的start position
*/
private int findStartPosition(Spannable spannable,int startWidthPosition) {
CharacterStyle[] oldSpans = spannable.getSpans(startWidthPosition,spannable.length(),CharacterStyle.class);
int position = startWidthPosition;
for (CharacterStyle oldSpan : oldSpans) {
int spanStart = spannable.getSpanStart(oldSpan);
int spanEnd = spannable.getSpanEnd(oldSpan);
if (spanStart <= startWidthPosition && spanEnd > startWidthPosition) {
position = spanStart;
}
if (spanStart >= startWidthPosition) {
spannable.removeSpan(oldSpan);
}
}
//L.e("call: findStartPosition([spannable,startWidthPosition]) " + startWidthPosition + " -> " + position);
return position;
}
项目:QMUI_Android
文件:QMUILinkTouchDecorHelper.java
public ITouchableSpan getpressedSpan(TextView textView,Spannable spannable,MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
x -= textView.getTotalPaddingLeft();
y -= textView.getTotalPaddingTop();
x += textView.getScrollX();
y += textView.getScrollY();
Layout layout = textView.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getoffsetForHorizontal(line,x);
if (x < layout.getLineLeft(line) || x > layout.getLineRight(line)) {
// 实际上没点到任何内容
off = -1;
}
ITouchableSpan[] link = spannable.getSpans(off,off,ITouchableSpan.class);
ITouchableSpan touchedSpan = null;
if (link.length > 0) {
touchedSpan = link[0];
}
return touchedSpan;
}
项目:qmui
文件:QMUILinkTouchDecorHelper.java
public ITouchableSpan getpressedSpan(TextView textView,ITouchableSpan.class);
ITouchableSpan touchedSpan = null;
if (link.length > 0) {
touchedSpan = link[0];
}
return touchedSpan;
}
项目:GitHub
文件:MyURLSpan.java
/**
* @param context
* @param spannable
* @param title
* @return
*/
public static SpannableStringBuilder getText(Activity context,String title) {
if (spannable == null || spannable.length() <= 0) {
Log.e(TAG,"getText spannable == null || spannable.length() <= 0 >> return new SpannableStringBuilder();");
return new SpannableStringBuilder();
}
SpannableStringBuilder builder = new SpannableStringBuilder(spannable);
builder.clearSpans();// should clear old spans
URLSpan[] urls = spannable.getSpans(0,URLSpan.class);
if (urls != null) {
for (URLSpan urlSpan : urls) {
if (urlSpan != null) {
MyURLSpan myURLSpan = new MyURLSpan(context,urlSpan.getURL(),title);
builder.setSpan(myURLSpan,spannable.getSpanStart(urlSpan),spannable
.getSpanEnd(urlSpan),Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
}
}
return builder;
}
项目:GitHub
文件:BookMarkAdapter.java
@Override
public void convert(EasyLVHolder holder,int position,BookMark item) {
TextView tv = holder.getView(R.id.tvMarkItem);
SpannableString spanText = new SpannableString((position + 1) + ". " + item.title + ": ");
spanText.setSpan(new ForegroundColorSpan(ContextCompat.getColor(mContext,R.color.light_coffee)),spanText.length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
tv.setText(spanText);
if (item.desc != null) {
tv.append(item.desc
.replaceAll(" ","")
.replaceAll(" ","")
.replaceAll("\n",""));
}
}
项目:okwallet
文件:WalletUtils.java
public static Editable formatHash(@Nullable final String prefix,final String address,final int groupSize,final int linesize,final char groupSeparator) {
final SpannableStringBuilder builder = prefix != null ? new SpannableStringBuilder(prefix)
: new SpannableStringBuilder();
final int len = address.length();
for (int i = 0; i < len; i += groupSize) {
final int end = i + groupSize;
final String part = address.substring(i,end < len ? end : len);
builder.append(part);
builder.setSpan(new TypefaceSpan("monospace"),builder.length() - part.length(),builder.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if (end < len) {
final boolean endOfLine = linesize > 0 && end % linesize == 0;
builder.append(endOfLine ? '\n' : groupSeparator);
}
}
return builder;
}
public boolean onTouchEvent(TextView widget,Spannable buffer,MotionEvent event) {
if (event.getAction() == 1) {
this.mLinkClicked = false;
this.mClickedLink = null;
int x = (((int) event.getX()) - widget.getTotalPaddingLeft()) + widget.getScrollX();
int y = (((int) event.getY()) - widget.getTotalPaddingTop()) + widget.getScrollY();
Layout layout = widget.getLayout();
int off = layout.getoffsetForHorizontal(layout.getLineForVertical(y),(float) x);
ClickableSpan[] link = (ClickableSpan[]) buffer.getSpans(off,ClickableSpan
.class);
if (link.length != 0) {
SensibleurlSpan span = link[0];
this.mLinkClicked = span.onClickSpan(widget);
this.mClickedLink = span.getURL();
return this.mLinkClicked;
}
}
super.onTouchEvent(widget,buffer,event);
return false;
}
/**
* Replaces the blue line produced by <blockquote>s with something more visible
*
* @param spannable parsed comment text #fromHtml
*/
private void replaceQuoteSpans(Spannable spannable) {
QuoteSpan[] quoteSpans = spannable.getSpans(0,QuoteSpan.class);
for (QuoteSpan quoteSpan : quoteSpans) {
final int start = spannable.getSpanStart(quoteSpan);
final int end = spannable.getSpanEnd(quoteSpan);
final int flags = spannable.getSpanFlags(quoteSpan);
spannable.removeSpan(quoteSpan);
//If the theme is Light or Sepia,use a darker blue; otherwise,use a lighter blue
final int barColor =
(SettingValues.currentTheme == 1 || SettingValues.currentTheme == 5)
? ContextCompat.getColor(getContext(),R.color.md_blue_600)
: ContextCompat.getColor(getContext(),R.color.md_blue_400);
final int BAR_WIDTH = 4;
final int GAP = 5;
spannable.setSpan(new CustomQuoteSpan(Color.TRANSPARENT,//background color
barColor,//bar color
BAR_WIDTH,//bar width
GAP),//bar + text gap
start,end,flags);
}
}
项目:EmoticonGIFKeyboard
文件:EmoticonUtils.java
/**
* Replace the system emoticons with the provided custom emoticons drawable. This will find the
* unicodes with supported emoticons in the provided text and will replace the emoticons with
* appropriate images.
*
* @param context instance of caller.
* @param text Text to replace
* @param emoticonProvider {@link EmoticonProvider} for emoticons images
* @param emoticonSize Size of the emoticons in dp
* @return Modified text.
*/
public static void replaceWithImages(@NonNull final Context context,@NonNull final Spannable text,@NonNull final EmoticonProvider emoticonProvider,final int emoticonSize) {
final EmoticonSpan[] existingSpans = text.getSpans(0,text.length(),EmoticonSpan.class);
final ArrayList<Integer> existingSpanPositions = new ArrayList<>(existingSpans.length);
for (EmoticonSpan existingSpan : existingSpans) {
existingSpanPositions.add(text.getSpanStart(existingSpan));
}
//Get location and unicode of all emoticons.
final List<EmoticonRange> findAllEmojis = findAllEmoticons(context,text,emoticonProvider);
//Replace all the emoticons with their relatives.
for (int i = 0; i < findAllEmojis.size(); i++) {
final EmoticonRange location = findAllEmojis.get(i);
if (!existingSpanPositions.contains(location.mStartPos)) {
text.setSpan(new EmoticonSpan(context,location.mEmoticon.getIcon(),emoticonSize),location.mStartPos,location.mEndPos,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
项目:IslamicLibraryAndroid
文件:SearchResult.java
public CharSequence getformatedSearchSnippet() {
//Todo implement improved snippet function
String CleanedSearchString = " " + arabicUtilities.cleanTextForSearchingWthStingBuilder(searchString) + " ";
StringBuilder cleanedUnformattedPage = new StringBuilder(arabicUtilities.cleanTextForSearchingWthStingBuilder(unformatedPage));
int firstMatchStart = cleanedUnformattedPage.indexOf(CleanedSearchString);
cleanedUnformattedPage.delete(0,Math.max(firstMatchStart - 100,0));
cleanedUnformattedPage.delete(
Math.min(firstMatchStart + CleanedSearchString.length() + 100,cleanedUnformattedPage.length()),cleanedUnformattedPage.length());
cleanedUnformattedPage.insert(0,"...");
cleanedUnformattedPage.append("...");
Spannable snippet = SpannableString.
valueOf(cleanedUnformattedPage.toString());
int index = TextUtils.indexOf(snippet,CleanedSearchString);
while (index >= 0) {
snippet.setSpan(new BackgroundColorSpan(0xFF8B008B),index,index
+ CleanedSearchString.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
index = TextUtils.indexOf(snippet,CleanedSearchString,index + CleanedSearchString.length());
}
return snippet;
}
项目:ultrasonic
文件:SelectPlaylistActivity.java
private void displayPlaylistInfo(final Playlist playlist)
{
final TextView textView = new TextView(this);
textView.setPadding(5,5,5);
final Spannable message = new SpannableString("Owner: " + playlist.getowner() + "\nComments: " +
((playlist.getComment() == null) ? "" : playlist.getComment()) +
"\nSong Count: " + playlist.getSongCount() +
((playlist.getPublic() == null) ? "" : ("\nPublic: " + playlist.getPublic()) + ((playlist.getCreated() == null) ? "" : ("\nCreation Date: " + playlist.getCreated().replace('T',' ')))));
Linkify.addLinks(message,Linkify.WEB_URLS);
textView.setText(message);
textView.setMovementMethod(LinkMovementMethod.getInstance());
new AlertDialog.Builder(this).setTitle(playlist.getName()).setCancelable(true).setIcon(android.R.drawable.ic_dialog_info).setView(textView).show();
}
项目:markor
文件:Highlighter.java
/**
* Create Span for matches in paragraph's. Note that this will highlight the full matched pattern
* (including optionals) if no group parameters are given.
*
* @param editable Text editable
* @param pattern The pattern to match
* @param creator A ParcelableSpanCreator for ParcelableSpan
* @param groupsToMatch (optional) groups to be matched,indexes start at 1.
*/
protected void createSpanForMatchesP(final Editable editable,final Pattern pattern,final ParagraphStyleCreator creator,int... groupsToMatch) {
if (groupsToMatch == null || groupsToMatch.length < 1) {
groupsToMatch = new int[]{0};
}
int i = 0;
for (Matcher m = pattern.matcher(editable); m.find(); i++) {
ParagraphStyle span = creator.create(m,i);
if (span != null) {
for (int g : groupsToMatch) {
if (g == 0 || g <= m.groupCount()) {
editable.setSpan(span,m.start(g),m.end(g),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
}
}
项目:revolution-irc
文件:SpannableStringHelper.java
public static void setAndMergeSpans(Spannable text,Object what,int start,int end,int flags) {
Object[] spans = text.getSpans(Math.max(start - 1,0),Math.min(end + 1,what.getClass());
for (Object span : spans) {
if (!areSpansEqual(span,what))
continue;
int sFlags = text.getSpanFlags(span);
if ((sFlags & Spanned.SPAN_COMPOSING) != 0)
continue;
int sstart = text.getSpanStart(span);
int sEnd = text.getSpanEnd(span);
if (sEnd < start || sstart > end)
continue;
text.removeSpan(span);
if (sstart < start)
start = sstart;
if (sEnd > end)
end = sEnd;
}
text.setSpan(what,start,flags);
}
项目:qmui
文件:QMUILinkify.java
private static void gatherPhoneLinks(ArrayList<LinkSpec> links,Spannable s,Pattern pattern,Pattern[] excepts,String[] schemes,MatchFilter matchFilter,TransformFilter transformFilter) {
Matcher m = pattern.matcher(s);
while (m.find()) {
if (isInExcepts(m.group(),excepts)) {
continue;
}
int start = m.start();
int end = m.end();
if (matchFilter == null || matchFilter.acceptMatch(s,end)) {
LinkSpec spec = new LinkSpec();
String url = makeUrl(m.group(0),schemes,m,transformFilter);
spec.url = url;
spec.start = start;
spec.end = end;
links.add(spec);
}
}
}
项目:GifEmoticon
文件:EmoticonUtils.java
static void replaceWithImages(@NonNull final Context context,EmoticonSpan.class);
final ArrayList<Integer> existingSpanPositions = new ArrayList<>(existingSpans.length);
for (EmoticonSpan existingSpan : existingSpans) {
existingSpanPositions.add(text.getSpanStart(existingSpan));
}
final List<EmoticonRange> findAllEmojis = findAllEmoticons(text,emoticonProvider);
for (int i = 0; i < findAllEmojis.size(); i++) {
final EmoticonRange location = findAllEmojis.get(i);
if (!existingSpanPositions.contains(location.mStartPos)) {
text.setSpan(EmoticonSpan.create(context,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
项目:ShangHanLun
文件:ShowFragment.java
public SpannableStringBuilder spannerbleTitleForHeaderInSection(
ATableView tableView,int section) {
HH2SectionData sd = data.get(section);
String text = sd.getHeader();
SpannableStringBuilder builder = new SpannableStringBuilder(text);
builder.setSpan(new ForegroundColorSpan(Color.BLUE),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if (text.contains("$")) {
int index = text.indexOf("$") + 1;
builder.setSpan(new ForegroundColorSpan(Color.RED),SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(new RelativeSizeSpan(0.55f),SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.replace(index - 1,"\n");
}
return builder;
}
项目:Sega
文件:SearchAdapter.java
@Override
public void onBindViewHolder(ResultViewHolder viewHolder,int position) {
SearchItem item = mResultList.get(position);
viewHolder.icon_left.setimageResource(item.get_icon());
viewHolder.icon_left.setColorFilter(SearchView.getIconColor(),PorterDuff.Mode.SRC_IN);
viewHolder.text.setTypeface((Typeface.create(SearchView.getTextFont(),SearchView.getTextStyle())));
viewHolder.text.setTextColor(SearchView.getTextColor());
String itemText = item.get_text().toString();
String itemTextLower = itemText.toLowerCase(Locale.getDefault());
if (itemTextLower.contains(key) && !key.isEmpty()) {
SpannableString s = new SpannableString(itemText);
s.setSpan(new ForegroundColorSpan(SearchView.getTextHighlightColor()),itemTextLower.indexOf(key),itemTextLower.indexOf(key) + key.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
viewHolder.text.setText(s,TextView.BufferType.SPANNABLE);
} else {
viewHolder.text.setText(item.get_text());
}
}
项目:MultiContactPicker
文件:MultiContactPickerAdapter.java
private void highlightTerm(TextView tv,String query,String originalString){
if (query != null && !query.isEmpty()) {
int startPos = originalString.toLowerCase().indexOf(query.toLowerCase());
int endPos = startPos + query.length();
if (startPos != -1) {
Spannable spannable = new SpannableString(originalString);
ColorStateList blackColor = new ColorStateList(new int[][]{new int[]{}},new int[]{Color.BLACK});
TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null,Typeface.BOLD,-1,blackColor,null);
spannable.setSpan(highlightSpan,startPos,endPos,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(spannable);
} else {
tv.setText(originalString);
}
} else {
tv.setText(originalString);
}
}
项目:xwallet
文件:WalletUtils.java
项目:Demos
文件:TouchLinkMovementMethod.java
@Override
public boolean onTouchEvent(TextView widget,MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getoffsetForHorizontal(line,x);
ClickableSpan[] link = buffer.getSpans(off,ClickableSpan.class);
if (link.length != 0) {
link[0].onClick(widget);
return true;
} else {
Selection.removeSelection(buffer);
}
}
return super.onTouchEvent(widget,event);
}
private void applySpan(Spannable spannable,@ColorInt int color,int end) {
spannable.setSpan(
new ForegroundColorSpan(color),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
项目:sealtalk-android-master
文件:TestMessageProvider.java
@Override
public Spannable getContentSummary(TestMessage data) {
if (data == null)
return null;
String content = data.getContent();
if (content != null) {
if (content.length() > 100) {
content = content.substring(0,100);
}
return new SpannableString(AndroidEmoji.ensure(content));
}
return null;
}
项目:simpledialogFragments
文件:AdvancedAdapter.java
/**
* Highlights everything that matched the current filter (if any) in text
*
* @param text the text to highlight
* @param context a context to get the default highlight color from
* @return a spannable string
*/
protected Spannable highlight(String text,Context context) {
if (mDefaultHighlightColor == null){
TypedArray array = context.obtainStyledAttributes(new int[]{
android.R.attr.textColorHighlight});
mDefaultHighlightColor = array.getColor(0,0x6633B5E5);
array.recycle();
}
return highlight(text,mDefaultHighlightColor);
}
项目:KingTV
文件:ChatFragment.java
@Override
public void initUI() {
SpannableStringBuilder ssb = new SpannableStringBuilder();
//系统通知图片
ImageSpan imageSpan = new ImageSpan(context,R.drawable.img_dm_xttz);
SpannableString spannableString = new SpannableString("tips");
spannableString.setSpan(imageSpan,spannableString.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.append(spannableString);
//系统通知内容
ssb.append(getText(R.string.tips_notice_desc));
tvTips.setText(ssb);
}
项目:q-mail
文件:ICalendarHelper.java
@VisibleForTesting
static CharSequence toFriendly(Organizer organizer,Contacts contacts,boolean showCorrespondentNames,boolean changeContactNameColor,int contactNameColor) {
if (organizer == null) {
return null;
}
if (!showCorrespondentNames) {
return organizer.getEmail();
} else if (contacts != null) {
final String name = contacts.getNameForAddress(organizer.getEmail());
// Todo: The results should probably be cached for performance reasons.
if (name != null) {
if (changeContactNameColor) {
final SpannableString coloredname = new SpannableString(name);
coloredname.setSpan(new ForegroundColorSpan(contactNameColor),coloredname.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
);
return coloredname;
} else {
return name;
}
}
}
return (!TextUtils.isEmpty(organizer.getCommonName())) ? organizer.getCommonName() : organizer.getEmail();
}
项目:GCSApp
文件:EaseSmileUtils.java
/**
* replace existing spannable with smiles
* @param context
* @param spannable
* @return
*/
public static boolean addSmiles(Context context,Spannable spannable) {
boolean hasChanges = false;
for (Entry<Pattern,Object> entry : emoticons.entrySet()) {
Matcher matcher = entry.getKey().matcher(spannable);
while (matcher.find()) {
boolean set = true;
for (ImageSpan span : spannable.getSpans(matcher.start(),matcher.end(),ImageSpan.class))
if (spannable.getSpanStart(span) >= matcher.start()
&& spannable.getSpanEnd(span) <= matcher.end())
spannable.removeSpan(span);
else {
set = false;
break;
}
if (set) {
hasChanges = true;
Object value = entry.getValue();
if(value instanceof String && !((String) value).startsWith("http")){
File file = new File((String) value);
if(!file.exists() || file.isDirectory()){
return false;
}
spannable.setSpan(new ImageSpan(context,Uri.fromFile(file)),matcher.start(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}else{
spannable.setSpan(new ImageSpan(context,(Integer)value),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
}
return hasChanges;
}
项目:UltimateRecyclerView
文件:StickyAdapter.java
private void setData(SuperViewHolder holder,StockEntity.StockInfo item) {
final String stockNameAndCode = item.stock_name + "\n" + item.stock_code;
SpannableStringBuilder ssb = new SpannableStringBuilder(stockNameAndCode);
ssb.setSpan(new ForegroundColorSpan(Color.parseColor("#a4a4a7")),item.stock_name.length(),stockNameAndCode.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(new AbsoluteSizeSpan(dip2px(holder.itemView.getContext(),13)),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
((TextView) holder.getView(R.id.tv_stock_name_code)).setText(ssb);
((TextView) holder.getView(R.id.tv_current_price)).setText(item.current_price);
((TextView) holder.getView(R.id.tv_rate)).setText(item.rate < 0 ? String.format("%.2f",item.rate) : ("+" + String.format("%.2f",item.rate)) + "%");
}
项目:chromium-for-android-56-debug-video
文件:AnswerTextBuilder.java
/**
* Append the styled text in textField to the supplied builder.
*
* @param builder The builder to append the text to.
* @param textField The text field (with text and type) to append.
* @param maxTextHeightSp The height in SP of the largest text field in the entire line. Used to
* top-align text when specified.
* @param metrics Font metrics which will be used to properly size and layout images and top-
* aligned text.
* @param density Screen density which will be used to properly size and layout images and top-
* aligned text.
*/
private static void appendAndStyleText(
SpannableStringBuilder builder,SuggestionAnswer.TextField textField,int maxTextHeightSp,Paint.FontMetrics metrics,float density) {
String text = textField.getText();
int type = textField.getType();
// Unescape HTML entities (e.g. """,">").
text = Html.fromHtml(text).toString();
// Append as HTML (answer responses contain simple markup).
int start = builder.length();
builder.append(Html.fromHtml(text));
int end = builder.length();
// Apply styles according to the type.
AbsoluteSizeSpan sizeSpan = new AbsoluteSizeSpan(getAnswerTextSizeSp(type),true);
builder.setSpan(sizeSpan,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ForegroundColorSpan colorSpan = new ForegroundColorSpan(getAnswerTextColor(type));
builder.setSpan(colorSpan,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if (type == ANSWERS_TOP_ALIGNED_TEXT_TYPE) {
TopAlignedSpan topAlignedSpan =
new TopAlignedSpan(
ANSWERS_TOP_ALIGNED_TEXT_SIZE_SP,maxTextHeightSp,metrics,density);
builder.setSpan(topAlignedSpan,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
项目:ShangHanLun
文件:FangFragment.java
public SpannableStringBuilder spannerbleTitleForHeaderInSection(
ATableView tableView,int section) {
SpannableStringBuilder builder = super
.spannerbleTitleForHeaderInSection(tableView,section);
SpannableString append = new SpannableString(String.format(
" 凡%d方",data.get(section).getData().size()));
append.setSpan(new ForegroundColorSpan(Color.BLUE),append.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(append);
return builder;
}
项目:GCSApp
文件:EaseChatRowRecSendMoney.java
@Override
public void onSetUpView() {
EMTextMessageBody txtBody = (EMTextMessageBody) message.getBody();
Spannable span = EaseSmileUtils.getSmiledText(context,txtBody.getMessage());
String money = message.getStringAttribute("transferMoney ","");
// 设置内容
if (StringUtils.isNotEmpty(money)) {
contentView.setText(money);
} else {
contentView.setText("0.0");
}
handleTextMessage();
}
项目:Veggietizer
文件:Utility.java
/**
* Sets the action bar title using the specified font.
*
* @param font The font to use.
* @param title The title to set.
*/
@SuppressWarnings("SameParameterValue")
public static void styleActionBar(ActionBar actionBar,FontManager.Font font,String title) {
SpannableString actionBarTitle = new SpannableString(title);
// ActionBar font
actionBarTitle.setSpan(new TypefaceSpan(font),actionBarTitle.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
actionBar.setTitle(actionBarTitle);
}
项目:ShangHanLun
文件:Helper.java
public static void renderItemNumber(SpannableStringBuilder builder) {
String string = builder.toString();
if (!string.contains("、")
|| !isNumeric(string.substring(0,string.indexOf("、")))) {
return;
}
ForegroundColorSpan numSpan = new ForegroundColorSpan(Color.BLUE);
builder.setSpan(numSpan,string.indexOf("、"),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
项目:AndroidSnooper
文件:HttpCallFragment.java
@Override
public void removeOldHighlightedSpans() {
Spannable spannableString = (Spannable) payloadTextView.getText();
BackgroundColorSpan[] backgroundSpans = spannableString.getSpans(0,BackgroundColorSpan.class);
for (BackgroundColorSpan span : backgroundSpans) {
spannableString.removeSpan(span);
}
}
项目:QMark
文件:EditSourcelistadapter.java
@Override
public void bind(int position,EditSourceListBean data) {
mFB.display(mImgBg,data.imgBgUrl);
mFB.display(mImgCatgy,data.ImgCatgyUrl);
mTextLeft.setText(data.textLeft);
Resources resources = getView().getResources();
SpannableStringBuilder spans = new SpannableStringBuilder(resources.getString(R.string.i_m_category_text_sign_count,data.textSignSize));
spans.setSpan(new ForegroundColorSpan(resources.getColor(R.color.text_title_orange)),2,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spans.setSpan(new ForegroundColorSpan(resources.getColor(R.color.text_title_orange)),spans.length() - 3,spans.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextSignSize.setText(spans);
}
/**
* Настройка отображения уведомления типа "reply_topic"
*
* @param notification уведомление
* @param holder контейнер в елементами интерфейса
*/
public void configReplyTopicFeedback(ReplyCommentFeedback notification,FeedbackAdapter.CommentHolder holder) {
Topic topic = (Topic) notification.getCommentsOf();
Comment Feedback = notification.getFeedbackComment();
Spannable FeedBackText = OwnerLinkSpanFactory.withSpans(Feedback.getText(),true,mLinkActionAdapter);
holder.cOwnerText.setText(FeedBackText);
holder.cOwnerText.setVisibility(TextUtils.isEmpty(FeedBackText) ? View.GONE : View.VISIBLE);
AttachmentsHolder containers = AttachmentsHolder.forFeedback(holder.vAttachmentsRoot);
attachmentsViewBinder.displayAttachments(Feedback.getAttachments(),containers,true);
String action = getDateFromUnixTime(Feedback.getDate());
action = action + SPACE + context.getString(R.string.in_reply_to_your_message_in_topic);
Link parentLink = Link.startOf(action.length());
action = action + SPACE + topic.getTitle();
parentLink.end(action.length());
Spannable spannable = Spannable.Factory.getInstance().newSpannable(action);
showAsLink(spannable,parentLink);
holder.cOwnerName.setText(Feedback.getFullAuthorName());
holder.cOwnerTime.setText(spannable,TextView.BufferType.SPANNABLE);
holder.cChangable.setVisibility(View.GONE);
PicassoInstance.with()
.load(Feedback.getMaxAuthorAvaUrl())
.tag(Constants.PICASSO_TAG)
.transform(transformation)
.into(holder.cOwnerAvatar);
holder.ivRightAttachment.setVisibility(View.GONE);
solveOwnerOpenByAvatar(holder.cOwnerAvatar,Feedback.getFromId());
configReply(notification.getReply(),holder);
}
/**
* Настройка отображения уведомления типа "reply_comment_photo"
*
* @param notification уведомление
* @param holder контейнер в елементами интерфейса
*/
public void configReplyCommentPhotoFeedback(ReplyCommentFeedback notification,FeedbackAdapter.CommentHolder holder) {
Comment parent = notification.getownComment();
Comment Feedback = notification.getFeedbackComment();
setupAttachmentViewWithPhoto((Photo) notification.getCommentsOf(),holder.ivRightAttachment);
String FeedBackText = OwnerLinkSpanFactory.getTextWithCollapSEOwnerLinks(Feedback.getText());
String action = getDateFromUnixTime(Feedback.getDate());
action = action + SPACE + context.getString(R.string.in_reply_to_your_comment);
String parentText;
if (TextUtils.isEmpty(parent.getText())) {
parentText = context.getString(R.string.from_date,getDateFromUnixTime(parent.getDate()));
} else {
parentText = reduce(OwnerLinkSpanFactory.getTextWithCollapSEOwnerLinks(parent.getText()));
}
Link parentLink = Link.startOf(action.length());
action = action + SPACE + parentText;
parentLink.end(action.length());
Spannable spannable = Spannable.Factory.getInstance().newSpannable(action);
showAsLink(spannable,parentLink);
holder.cOwnerName.setText(Feedback.getFullAuthorName());
holder.cOwnerText.setText(FeedBackText);
holder.cOwnerText.setVisibility(TextUtils.isEmpty(FeedBackText) ? View.GONE : View.VISIBLE);
holder.cOwnerTime.setText(spannable,TextView.BufferType.SPANNABLE);
holder.cChangable.setVisibility(View.GONE);
AttachmentsHolder containers = AttachmentsHolder.forFeedback(holder.vAttachmentsRoot);
attachmentsViewBinder.displayAttachments(Feedback.getAttachments(),true);
showUserAvaTaronImageView(Feedback.getMaxAuthorAvaUrl(),holder.cOwnerAvatar);
solveOwnerOpenByAvatar(holder.cOwnerAvatar,holder);
}
项目:javaide
文件:XmlCommentHighlighter.java
@Override
public void highlight(@NonNull Editable allText,@NonNull CharSequence textToHighlight,int start) {
mCommentRegion.clear();
for (Matcher m = XML_COMMENTS.matcher(textToHighlight); m.find(); ) {
allText.setSpan(new ForegroundColorSpan(codeTheme.getCommentColor()),start + m.start(),start + m.end(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mCommentRegion.add(new Pair<>(start + m.start(),start + m.end()));
}
}
项目:Espresso
文件:CompanyDetailFragment.java
@Override
public void setCompanyTel(String tel) {
this.tel = tel;
String companyTel = getString(R.string.phone_number) + "\n" + tel;
Spannable spannable = new SpannableStringBuilder(companyTel);
spannable.setSpan(new StyleSpan(Typeface.BOLD),companyTel.length() - tel.length() - 1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new URLSpan(tel),companyTel.length() - tel.length(),companyTel.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textViewTel.setText(spannable);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。