List of usage examples for android.text Spanned SPAN_EXCLUSIVE_EXCLUSIVE
int SPAN_EXCLUSIVE_EXCLUSIVE
To view the source code for android.text Spanned SPAN_EXCLUSIVE_EXCLUSIVE.
Click Source Link
From source file:com.zulip.android.util.CustomHtmlToSpannedConverter.java
/** <<<<<<< e370c9bc00e8f6b33b1d12a44b4c70a7f063c8b9 * Parses Spanned text for existing html links and reapplies them after the text has been Linkified =======/*from www. java 2s . c o m*/ * Parses Spanned text for existing html links and reapplies them. >>>>>>> Issue #168 bugfix for links not being clickable, adds autoLink feature including web, phone, map and email * @see <a href="https://developer.android.com/reference/android/text/util/Linkify.html">Linkify</a> * * @param spann * @param mask bitmask to define which kinds of links will be searched and applied (e.g. <a href="https://developer.android.com/reference/android/text/util/Linkify.html#ALL">Linkify.ALL</a>) * @return */ public static Spanned linkifySpanned(@NonNull final Spanned spann, final int mask) { URLSpan[] existingSpans = spann.getSpans(0, spann.length(), URLSpan.class); List<Pair<Integer, Integer>> links = new ArrayList<>(); for (URLSpan urlSpan : existingSpans) { links.add(new Pair<>(spann.getSpanStart(urlSpan), spann.getSpanEnd(urlSpan))); } Linkify.addLinks((Spannable) spann, mask); // add the links back in for (int i = 0; i < existingSpans.length; i++) { ((Spannable) spann).setSpan(existingSpans[i], links.get(i).first, links.get(i).second, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return spann; }
From source file:com.fa.mastodon.activity.MainActivity.java
private void setupSearchView() { searchView.attachNavigationDrawerToMenuButton(drawer.getDrawerLayout()); // Setup content descriptions for the different elements in the search view. final View leftAction = searchView.findViewById(R.id.left_action); leftAction.setContentDescription(getString(R.string.action_open_drawer)); searchView.setOnFocusChangeListener(new FloatingSearchView.OnFocusChangeListener() { @Override// w ww . ja v a 2s. com public void onFocus() { leftAction.setContentDescription(getString(R.string.action_close)); } @Override public void onFocusCleared() { leftAction.setContentDescription(getString(R.string.action_open_drawer)); } }); View clearButton = searchView.findViewById(R.id.clear_btn); clearButton.setContentDescription(getString(R.string.action_clear)); searchView.setOnQueryChangeListener(new FloatingSearchView.OnQueryChangeListener() { @Override public void onSearchTextChanged(String oldQuery, String newQuery) { if (!oldQuery.equals("") && newQuery.equals("")) { searchView.clearSuggestions(); return; } if (newQuery.length() < 3) { return; } searchView.showProgress(); mastodonAPI.searchAccounts(newQuery, false, 5).enqueue(new Callback<List<Account>>() { @Override public void onResponse(Call<List<Account>> call, Response<List<Account>> response) { if (response.isSuccessful()) { searchView.swapSuggestions(response.body()); searchView.hideProgress(); } else { searchView.hideProgress(); } } @Override public void onFailure(Call<List<Account>> call, Throwable t) { searchView.hideProgress(); } }); } }); searchView.setOnSearchListener(new FloatingSearchView.OnSearchListener() { @Override public void onSuggestionClicked(SearchSuggestion searchSuggestion) { Account accountSuggestion = (Account) searchSuggestion; Intent intent = new Intent(MainActivity.this, AccountActivity.class); intent.putExtra("id", accountSuggestion.id); startActivity(intent); } @Override public void onSearchAction(String currentQuery) { } }); searchView.setOnBindSuggestionCallback(new SearchSuggestionsAdapter.OnBindSuggestionCallback() { @Override public void onBindSuggestion(View suggestionView, ImageView leftIcon, TextView textView, SearchSuggestion item, int itemPosition) { Account accountSuggestion = ((Account) item); Picasso.with(MainActivity.this).load(accountSuggestion.avatar) .placeholder(R.drawable.avatar_default).into(leftIcon); String searchStr = accountSuggestion.getDisplayName() + " " + accountSuggestion.username; final SpannableStringBuilder str = new SpannableStringBuilder(searchStr); str.setSpan(new StyleSpan(Typeface.BOLD), 0, accountSuggestion.getDisplayName().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(str); textView.setMaxLines(1); textView.setEllipsize(TextUtils.TruncateAt.END); } }); if (PreferenceManager.getDefaultSharedPreferences(this).getString("theme_selection", "light") .equals("black")) { searchView.setBackgroundColor(Color.parseColor("#444444")); } }
From source file:com.andrewshu.android.reddit.comments.CommentsListActivity.java
/** * Mark the OP submitter comments/*from www .j a v a2s . c o m*/ */ void markSubmitterComments() { if (getOpThingInfo() == null || mCommentsAdapter == null) return; SpannableString authorSS = new SpannableString(getOpThingInfo().getAuthor() + " [S]"); ForegroundColorSpan fcs; if (Util.isLightTheme(mSettings.getTheme())) fcs = new ForegroundColorSpan(getResources().getColor(R.color.blue)); else fcs = new ForegroundColorSpan(getResources().getColor(R.color.pale_blue)); authorSS.setSpan(fcs, 0, authorSS.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); for (int i = 0; i < mCommentsAdapter.getCount(); i++) { ThingInfo ci = mCommentsAdapter.getItem(i); // if it's the OP, mark his name if (getOpThingInfo().getAuthor().equalsIgnoreCase(ci.getAuthor())) ci.setSSAuthor(authorSS); } }
From source file:com.hippo.nimingban.ui.ListActivity.java
private Spanned fixURLSpan(Spanned spanned) { Spannable spannable;/* w w w . jav a 2 s .co m*/ if (spanned instanceof Spannable) { spannable = (Spannable) spanned; } else { spannable = new SpannableString(spanned); } URLSpan[] urlSpans = spannable.getSpans(0, spanned.length(), URLSpan.class); if (urlSpans == null) { return spanned; } for (URLSpan urlSpan : urlSpans) { String url = urlSpan.getURL(); if (TextUtils.isEmpty(url)) { spannable.removeSpan(urlSpan); } try { new URL(url); } catch (MalformedURLException e) { URL absoluteUrl; // It might be relative path try { // Use absolute url absoluteUrl = new URL(new URL(ACUrl.HOST), url); int start = spannable.getSpanStart(urlSpan); int end = spannable.getSpanEnd(urlSpan); spannable.removeSpan(urlSpan); spannable.setSpan(new URLSpan(absoluteUrl.toString()), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } catch (MalformedURLException e1) { // Can't get url spannable.removeSpan(urlSpan); } } } return spannable; }
From source file:com.jecelyin.editor.v2.core.text.TextUtils.java
/** * Return a new CharSequence in which each of the source strings is * replaced by the corresponding element of the destinations. *//*from ww w . j av a 2s . com*/ public static CharSequence replace(CharSequence template, String[] sources, CharSequence[] destinations) { SpannableStringBuilder tb = new SpannableStringBuilder(template); for (int i = 0; i < sources.length; i++) { int where = indexOf(tb, sources[i]); if (where >= 0) tb.setSpan(sources[i], where, where + sources[i].length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } for (int i = 0; i < sources.length; i++) { int start = tb.getSpanStart(sources[i]); int end = tb.getSpanEnd(sources[i]); if (start >= 0) { tb.replace(start, end, destinations[i]); } } return tb; }
From source file:im.ene.lab.attiq.ui.activities.ItemDetailActivity.java
private void updateTitle() { float titleAlpha = mToolBarLayout.shouldTriggerScrimOffset(mToolbarLayoutOffset) ? 1.f : 0.f; mTitleColorSpan.setAlpha(titleAlpha); // title//from w w w . j a v a 2s.c om mSpannableTitle.setSpan(mTitleColorSpan, 0, mSpannableTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); mToolbar.setTitle(mSpannableTitle); // subtitle if (mSpannableSubtitle != null) { mSpannableSubtitle.setSpan(mTitleColorSpan, 0, mSpannableSubtitle.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); mToolbar.setSubtitle(mSpannableSubtitle); } }
From source file:com.ruesga.rview.SearchActivity.java
private CharSequence performFilterHighlight(Suggestion suggestion) { Spannable span = Spannable.Factory.getInstance().newSpannable(suggestion.mSuggestionText); int pos = 0;/*from w ww. j a va 2 s . c om*/ final Locale locale = AndroidHelper.getCurrentLocale(getApplicationContext()); final String suggestionNoCase = suggestion.mSuggestionText.toLowerCase(locale); final String filterNoCase = suggestion.mFilter.toLowerCase(locale); while ((pos = suggestionNoCase.indexOf(filterNoCase, pos)) != -1) { final int length = suggestion.mFilter.length(); if (length == 0) { break; } final StyleSpan bold = new StyleSpan(android.graphics.Typeface.BOLD); final ForegroundColorSpan color = new ForegroundColorSpan(ContextCompat.getColor(this, R.color.accent)); span.setSpan(bold, pos, pos + length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); span.setSpan(color, pos, pos + length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); pos += length; if (pos >= suggestionNoCase.length()) { break; } } return span; }
From source file:io.plaidapp.ui.HomeActivity.java
private void setNoFiltersEmptyTextVisibility(int visibility) { if (visibility == View.VISIBLE) { if (noFiltersEmptyText == null) { // create the no filters empty text ViewStub stub = (ViewStub) findViewById(R.id.stub_no_filters); noFiltersEmptyText = (TextView) stub.inflate(); String emptyText = getString(R.string.no_filters_selected); int filterPlaceholderStart = emptyText.indexOf('\u08B4'); int altMethodStart = filterPlaceholderStart + 3; SpannableStringBuilder ssb = new SpannableStringBuilder(emptyText); // show an image of the filter icon ssb.setSpan(new ImageSpan(this, R.drawable.ic_filter_small, ImageSpan.ALIGN_BASELINE), filterPlaceholderStart, filterPlaceholderStart + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // make the alt method (swipe from right) less prominent and italic ssb.setSpan(new ForegroundColorSpan(ContextCompat.getColor(this, R.color.text_secondary_light)), altMethodStart, emptyText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ssb.setSpan(new StyleSpan(Typeface.ITALIC), altMethodStart, emptyText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); noFiltersEmptyText.setText(ssb); noFiltersEmptyText.setOnClickListener(new View.OnClickListener() { @Override/*w w w .j a va2 s. c o m*/ public void onClick(View v) { drawer.openDrawer(GravityCompat.END); } }); } noFiltersEmptyText.setVisibility(visibility); } else if (noFiltersEmptyText != null) { noFiltersEmptyText.setVisibility(visibility); } }
From source file:android_network.hetnet.vpn_service.AdapterRule.java
private void markPro(MenuItem menu, String sku) { if (true) {/*w w w .j a v a 2s. c om*/ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean dark = prefs.getBoolean("dark_theme", false); SpannableStringBuilder ssb = new SpannableStringBuilder(" " + menu.getTitle()); ssb.setSpan( new ImageSpan(context, dark ? R.drawable.ic_shopping_cart_white_24dp : R.drawable.ic_shopping_cart_black_24dp), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); menu.setTitle(ssb); } }
From source file:com.atwal.wakeup.battery.util.Utilities.java
public static SpannableString highlightKeywords(int color, String text, String keywords, boolean actionFirstMatch) { if (text != null && keywords != null && text.trim().length() == keywords.trim().length()) { return SpannableString.valueOf(text.trim()); }//w ww. j a va2 s .c o m SpannableString s = new SpannableString(text); Pattern p = Pattern.compile(keywords, Pattern.LITERAL); Matcher m = p.matcher(s); while (m.find()) { int end = m.end(); try { if (s.charAt(end) != ' ') { s.setSpan(new UnderlineSpan(), end, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } else { s.setSpan(new UnderlineSpan(), end + 1, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } } catch (Exception e) { e.printStackTrace(); } if (actionFirstMatch) { break; } } return s; }