Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
package com.yunbao.common.event;
|
||||
|
||||
import com.yunbao.common.bean.BaseModel;
|
||||
import com.yunbao.common.bean.OlineUserlistModel;
|
||||
|
||||
public class LiveInputEvent extends BaseModel {
|
||||
private OlineUserlistModel model;
|
||||
|
||||
public OlineUserlistModel getModel() {
|
||||
return model;
|
||||
}
|
||||
|
||||
public LiveInputEvent setModel(OlineUserlistModel model) {
|
||||
this.model = model;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
17
common/src/main/java/com/yunbao/common/event/OlineEvent.java
Normal file
17
common/src/main/java/com/yunbao/common/event/OlineEvent.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package com.yunbao.common.event;
|
||||
|
||||
import com.yunbao.common.bean.BaseModel;
|
||||
import com.yunbao.common.bean.OlineUserlistModel;
|
||||
|
||||
public class OlineEvent extends BaseModel {
|
||||
private OlineUserlistModel model;
|
||||
|
||||
public OlineUserlistModel getModel() {
|
||||
return model;
|
||||
}
|
||||
|
||||
public OlineEvent setModel(OlineUserlistModel model) {
|
||||
this.model = model;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.yunbao.common.utils;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import taobe.tec.jcc.JChineseConvertor;
|
||||
|
||||
/**
|
||||
* 繁體簡體轉換類
|
||||
*/
|
||||
public class WordsTypeUtil {
|
||||
//繁体转成简体
|
||||
public static String changeSimplified(String changeText) {
|
||||
try {
|
||||
JChineseConvertor jChineseConvertor = JChineseConvertor
|
||||
.getInstance();
|
||||
changeText = jChineseConvertor.t2s(changeText);
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return changeText;
|
||||
}
|
||||
|
||||
//简体转繁体
|
||||
public static String changeTraditional(String changeText) {
|
||||
try {
|
||||
JChineseConvertor jChineseConvertor = JChineseConvertor
|
||||
.getInstance();
|
||||
changeText = jChineseConvertor.s2t(changeText);
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return changeText;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
package com.yunbao.common.views.weight;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.text.Editable;
|
||||
import android.text.Spannable;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.KeyEvent;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.yunbao.common.bean.OlineUserlistModel;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
//输入监听
|
||||
public class AtTextWatcher implements TextWatcher {
|
||||
private Map<String, OlineUserlistModel> spanMap = new HashMap<>();
|
||||
private EditText input;
|
||||
private SpannableStringBuilder spannableStringBuilder;
|
||||
private SpannableStringBuilder beforeStr, afterText;
|
||||
private boolean removeListener = true;
|
||||
|
||||
public AtTextWatcher() {
|
||||
spannableStringBuilder = new SpannableStringBuilder();
|
||||
}
|
||||
|
||||
public void insertTextForAt(OlineUserlistModel model, EditText input) {
|
||||
this.input = input;
|
||||
if (!spanMap.containsKey(model.getId())) {
|
||||
if (!TextUtils.isEmpty(input.getText())) {
|
||||
spannableStringBuilder = new SpannableStringBuilder(input.getText());
|
||||
}
|
||||
String nameStr = model.getUserNicename();
|
||||
int startIndex = input.getSelectionStart();//光标的位置
|
||||
int endIndex = startIndex + nameStr.length();//字符结束的位置
|
||||
spanMap.put(model.getId(), model);
|
||||
//插入要添加的字符,此处是为了给span占位
|
||||
input.getText().insert(startIndex, "@" + nameStr);
|
||||
//1、使用mEditText构造一个SpannableString
|
||||
StringBuffer atName = new StringBuffer();
|
||||
atName.append("@").append(nameStr);
|
||||
if (spannableStringBuilder.length() > 0) {
|
||||
spannableStringBuilder.insert(startIndex, atName.toString());
|
||||
} else {
|
||||
spannableStringBuilder.append(atName.toString());
|
||||
}
|
||||
|
||||
AtUserForegroundColorSpan span = new AtUserForegroundColorSpan(Color.parseColor("#2a92f7"));
|
||||
span.setAtContent(atName.toString());
|
||||
span.setUid(model.getId());
|
||||
span.setName(nameStr);
|
||||
spannableStringBuilder.setSpan(span,
|
||||
startIndex, endIndex + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
input.setTextKeepState(spannableStringBuilder);
|
||||
input.setOnKeyListener((v, keyCode, event) -> {
|
||||
if (keyCode == KeyEvent.KEYCODE_DEL && event.getAction() == KeyEvent.ACTION_DOWN) {
|
||||
if (removeListener) {
|
||||
input.addTextChangedListener(AtTextWatcher.this);
|
||||
removeListener = false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
beforeStr = new SpannableStringBuilder(s);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence afterStr, int start, int before, int count) {
|
||||
afterText = new SpannableStringBuilder(afterStr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
boolean change = false;
|
||||
if (!TextUtils.isEmpty(beforeStr)) {
|
||||
if (afterText.length() < beforeStr.length()) {//删除内容的操作
|
||||
SpannableStringBuilder beforeSp = beforeStr;
|
||||
AtUserForegroundColorSpan[] beforeSpans = beforeSp.getSpans(0, beforeSp.length(), AtUserForegroundColorSpan.class);
|
||||
for (AtUserForegroundColorSpan span : beforeSpans) {
|
||||
if (!s.toString().contains(span.getAtContent())) {
|
||||
beforeSp.replace(beforeSp.getSpanStart(span), beforeSp.getSpanEnd(span), "");
|
||||
beforeSp.removeSpan(span);
|
||||
spanMap.remove(span.getUid());
|
||||
input.removeTextChangedListener(this);
|
||||
removeListener = true;
|
||||
change = true;
|
||||
}
|
||||
}
|
||||
beforeStr = null;
|
||||
if (change) {
|
||||
input.setTextKeepState(beforeSp);
|
||||
spannableStringBuilder = beforeSp;
|
||||
} else {
|
||||
input.setTextKeepState(afterText);
|
||||
spannableStringBuilder = afterText;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.yunbao.common.views.weight;
|
||||
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
|
||||
public class AtUserForegroundColorSpan extends ForegroundColorSpan {
|
||||
public String name;
|
||||
public String uid;
|
||||
public String atContent;
|
||||
|
||||
public AtUserForegroundColorSpan(int color) {
|
||||
super(color);
|
||||
}
|
||||
|
||||
public String getUid() {
|
||||
return uid;
|
||||
}
|
||||
|
||||
public AtUserForegroundColorSpan setUid(String uid) {
|
||||
this.uid = uid;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public AtUserForegroundColorSpan setName(String name) {
|
||||
this.name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getAtContent() {
|
||||
return atContent;
|
||||
}
|
||||
|
||||
public AtUserForegroundColorSpan setAtContent(String atContent) {
|
||||
this.atContent = atContent;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user