Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

An efficient and scalable library for inputing and displaying gif or @mention on graph-text mixed TextView/EditText

License

Notifications You must be signed in to change notification settings

sunhapper/SpEditTool

Repository files navigation

Description

An efficient and scalable library for inputing and displaying gif or @mention on graph-text mixed TextView/EditText

ScreenShot

ScreenShot ScreenShot

feature

  • fully removed special content
  • part removed special content
  • custom style
  • show gif on text
  • load gif with AndroidGifDrawable
  • load gif with Gidle

todo

  • load gif with Fresco
  • more styles of ImageSpan

change log

  • 1.0.1-1.0.4

    • fix bug
  • 1.0.0

    • use more elegant implementation of @mention(special thanks to iYaoy)
    • clearer package structure
    • library for supporting Glide/AndroidGifDrawable

Usage

Gradle

  • root build.gradle
	allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}
  • dependency

dependencies {
	 implementation 'com.github.sunhapper.SpEditTool:SpEditText:{last version}'
	 //help to create gif drawable use Glide
	 implementation 'com.github.sunhapper.SpEditTool:SpGlideDrawable:{last version}'
	 //help to create gif drawable use AndroidGifDrawable
	 implementation 'com.github.sunhapper.SpEditTool:SpGifDrawable:{last version}'
	}

xml

EditText

  • CustomInputConnectionWrapper to accept keyEvent,because setOnKeyListener may not react KeyEvent when use Google input method
  • SpanChangedWatcher to handle @mention content
  • GifWatcher to display gif on text
<com.sunhapper.x.spedit.view.SpXEditText
 android:layout_width="match_parent"
 android:layout_height="wrap_content"/>

TextView

<com.sunhapper.x.spedit.view.SpXTextView
 android:layout_width="match_parent"
 android:layout_height="wrap_content"/>

java

  • create @mention Spannable
//IntegratedSpan will be fully removed
public class MentionUser implements IntegratedSpan {
 public String name;
 public long id;
 public Spannable getSpannableString() {
 SpannableString spannableString = new SpannableString(getDisplayText());
 spannableString.setSpan(new ForegroundColorSpan(Color.MAGENTA), 0, spannableString.length(),
 Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 spannableString.setSpan(this, 0, spannableString.length(),
 Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
 return stringBuilder.append(spannableString).append(" ");
 }
}
  • delete style span when BreakableSpan was broken
//BreakableSpan can be part removed
public class Topic implements BreakableSpan {
 ...
 /**
 * @return true the BreakableSpan will be removed
 * you can remove custom style span when content broken
 */
 @Override
 public boolean isBreak(Spannable text) {
 int spanStart = text.getSpanStart(this);
 int spanEnd = text.getSpanEnd(this);
 boolean isBreak = spanStart >= 0 && spanEnd >= 0 && !text.subSequence(spanStart, spanEnd).toString().equals(
 getDisplayText());
 if (isBreak && styleSpan != null) {
 text.removeSpan(styleSpan);
 styleSpan = null;
 }
 return isBreak;
 }
}
  • load gif with AndroidGifDrawable
Drawable drawable = new TextGifDrawable(emojiconFile);
Spannable spannable = SpUtil.createGifDrawableSpan(gifDrawable,"text");
  • load gif with Glide
//placeholder drawable
GifDrawable gifDrawable = new TextGifDrawable(getResources(), R.drawable.a);
ProxyDrawable proxyDrawable = new ProxyDrawable();
GlideApp.with(this)
 .load(gifurl)
 .placeholder(gifDrawable)
 .into(new DrawableTarget(proxyDrawable));
return SpUtil.createResizeGifDrawableSpan(proxyDrawable, "text");
  • custom Factory
    • you can create your own SpanWatcher and Spannable.Factory/Editable.Factory
    • usesetSpannableFactory/setEditableFactoryinstead of using SpXTextView or SpXEditText

proguard

-keep class com.sunhapper.x.spedit.**{*;}

more detail info and guidance,please see the app demo

中文文档

welcome to star,PR and issue

About

An efficient and scalable library for inputing and displaying gif or @mention on graph-text mixed TextView/EditText

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /