public int rtImageHeight;
public static final Creator<TextEditorState> CREATOR = new Creator<TextEditorState>() {
@Override
public TextEditorState createFromParcel(Parcel in) {
return new TextEditorState(in);
}
@Override
public TextEditorState[] newArray(int size) {
return new TextEditorState[size];
}
};
public TextEditorState(Parcelable superState) {
super(superState);
}
public TextEditorState(Parcel source) {
super(source);
rtImageHeight = source.readInt();
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeInt(rtImageHeight);
}
}
```
/**
* 复现
* @param state state
*/
@Override
protected void onRestoreInstanceState(Parcelable state) {
TextEditorState viewState = (TextEditorState) state;
rtImageHeight = viewState.rtImageHeight;
super.onRestoreInstanceState(viewState.getSuperState());
requestLayout();
}
```
focusListener = new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
lastFocusEdit = (EditText) v;
HyperLogUtils.d("HyperTextEditor---onFocusChange--"+lastFocusEdit);
}
}
};
/**
* 在特定位置插入EditText
* @param index 位置
* @param editStr EditText显示的文字
*/
public void addEditTextAtIndex(final int index, CharSequence editStr) {
//省略部分代码
try {
EditText editText = createEditText("插入文字", EDIT_PADDING);
editText.setOnFocusChangeListener(focusListener);
layout.addView(editText, index);
//插入新的EditText之后,修改lastFocusEdit的指向
lastFocusEdit = editText;
//获取焦点
lastFocusEdit.requestFocus();
//将光标移至文字指定索引处
lastFocusEdit.setSelection(editStr.length(), editStr.length());
} catch (Exception e) {
e.printStackTrace();
}
}
```
@Override
public void onError(Throwable e) {
ToastUtils.showRoundRectToast("图片插入失败:"+e.getMessage());
}
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String imagePath) {
//插入图片
hte_content.insertImage(imagePath);
}
});
```
}
}
});
```
@Override
public void startTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) {
}
@Override
public void endTransition(LayoutTransition transition,
ViewGroup container, View view, int transitionType) {
if (!transition.isRunning() && transitionType == LayoutTransition.CHANGE_DISAPPEARING) {
// transition动画结束,合并EditText
mergeEditText();
}
}
});
mTransition.enableTransitionType(LayoutTransition.APPEARING);
mTransition.setDuration(300);
layout.setLayoutTransition(mTransition);
```
/**
* 修改斜体样式
*/
public void italic() {
SpanTextHelper.getInstance().italic(lastFocusEdit);
}
/**
* 修改删除线样式
*/
public void strikeThrough() {
SpanTextHelper.getInstance().strikeThrough(lastFocusEdit);
}
/**
* 修改下划线样式
*/
public void underline() {
SpanTextHelper.getInstance().underline(lastFocusEdit);
}
```上面实现了选中文本加粗的功能,斜体、 下划线 、中划线等样式的设置和取消与粗体样式一致,只是创建 span 的区别而已,可以将代码进行抽取。public abstract class NormalStyle<E> {
private Class<E> clazzE;
public NormalStyle() {
//利用反射
clazzE = (Class<E>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
/**
* 样式情况判断
* @param editable editable
* @param start start
* @param end end
*/
public void applyStyle(Editable editable, int start, int end) {
}
}
```
public class UnderlineStyle extends NormalStyle<UnderLineSpan> {
@Override
protected UnderLineSpan newSpan() {
return new UnderLineSpan();
}
}
```
lastFocusEdit.setText(editStr1);
addEditTextAtIndex(lastEditIndex + 1, editStr2);
addEditTextAtIndex(lastEditIndex + 1, "");
addImageViewAtIndex(lastEditIndex + 1, imagePath);
```
/**
* 富文本输入文字内容
*/
private String inputStr;
/**
* 富文本输入图片地址
*/
private String imagePath;
/**
* 类型:1,代表文字;2,代表图片
*/
private int type;
//省略很多set,get方法
}
```
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。