輸入@xxx #話題#等特殊字符,實(shí)現(xiàn)整體刪除稚机,文字高亮等功能的自定義EditText
項(xiàng)目地址 https://github.com/sunhapper/SpEditTool
思路介紹 自定義EditText輕松實(shí)現(xiàn)群聊精確@提及功能(@mention) 微博話題等功能
歡迎star幕帆,提PR、issue
ScreenShot
使用說明
Gradle
- root build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- dependency
dependencies {
compile 'com.github.sunhapper:SpEditTool:0.2.3'
}
xml
<com.sunhapper.spedittool.view.SpEditText
android:id="@+id/spEdt"
app:react_keys="#*%@"
app:sp_mode="breakable"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
- app:react_keys--要響應(yīng)的字符列表,也可以在java代碼中用setReactKeys設(shè)置
- app:sp_mode
- "integrated"表示完整刪除
- "breakable"普通刪除赖条,當(dāng)完整性被破壞失乾,對(duì)應(yīng)的數(shù)據(jù)和樣式會(huì)被移除
java
- 設(shè)置要響應(yīng)的字符列表及設(shè)置回調(diào)
//參數(shù)為String,會(huì)被解析成char[]
spEditText.setReactKeys("@#%*");
spEditText.setKeyReactListener(new KeyReactListener() {
@Override
public void onKeyReact(String key) {
//key被響應(yīng)的字符,長(zhǎng)度為1
//todo 處理自己的邏輯
}
});
- 插入特殊字符串
spEditText.insertSpecialStr(" @sunhapper ", true, 0, new ForegroundColorSpan(Color.RED));
/**
* 插入特殊字符串
*
* @param showContent 特殊字符串顯示在文本框中的內(nèi)容
* @param rollBack 是否往前刪除一個(gè)字符纬乍,因?yàn)锧的時(shí)候可能留了一個(gè)字符在輸入框里
* @param customData 特殊字符串的數(shù)據(jù)結(jié)構(gòu)
* @param customSpan 特殊字符串的樣式
*/
public void insertSpecialStr(String showContent, boolean rollBack, Object customData,
Object customSpan)
- 獲取SpEditText的數(shù)據(jù)
//獲取到的數(shù)據(jù)是根據(jù)起點(diǎn)位置排過序的
SpData[] spDatas = spEditText.getSpDatas();
public class SpData {
/**
* EditText中顯示的內(nèi)容
*/
private String showContent;
/**
* 插入特殊字符串時(shí)傳入的代表自定義數(shù)據(jù)結(jié)構(gòu)的對(duì)象
*/
private Object customData;
/**
* 特殊字符串的在完整字符串中的起點(diǎn)
*/
private int start;
/**
* 特殊字符串的在完整字符串中的終點(diǎn)
*/
private int end;
}
彩蛋
GifTextUtil.setText(TextView textView,CharSequence text)
一行代碼讓TextView中ImageSpan支持Gif