- 支持设置字体大小
- 支持设置字体大小
- 支持设置预览提示文字
- 支持设置、取消设置,粗体
- 支持设置、取消设置,斜体
- 支持设置、取消设置,下划线
- 支持增加分隔线
- 支持插入图片(插入图片url)
- 支持撤销、取消撤销,上一步操作
- 支持清空所有内容
- 支持上传图片
- 支持回显
- 支持光标移动回显已设置的属性项
- 支持字体大小改变监听
正文
- 定义操作接口和字体大小枚举
public interface ILinghitRichEditor {
/**
* 依附WebView,在WebView创建时会调用
*/
void attachWebView(WebView webView);
/**
* 分发onDestroy事件,需要外部调用,在Activity和Fragment的onDestroy()时调用,内部会将文件、图片上传等任务移除
*/
void dispatchDestroy();
//----------> 核心方法 <----------
/**
* 设置H标签的等级大小,这个字体大小是全局的,不能指定某个字体大或小
*
* @param sizeEnum 等级枚举
*/
void setTitleSize(TitleSizeEnum sizeEnum);
/**
* 恢复到默认字体大小
*/
void setDefaultTitleSize();
/**
* 获取当前设置的字体大小
*/
TitleSizeEnum getCurrentTitleSize();
/**
* 设置窗体大小
*/
void setFrameSize(int width, int height);
/**
* 设置预览文字
*/
void setTextPlaceholder(String placeholder);
/**
* 设置或取消粗体
*/
void toggleBold();
/**
* 设置或取消斜体
*/
void toggleItalic();
/**
* 设置或取消下划线
*/
void toggleUnderline();
/**
* 增加分割线
*/
void addDivider();
/**
* 设置或取消删除线
*/
void toggleDeleteLine();
/**
* 直接插入图片Url,这里插入图片,需要先上传到图片服务器后,再将图片的完整Url地址传过来,在WebView中加载
*/
void insertImages(String... imgUrls);
/**
* 以路径形式批量插入图片
*
* @param uploadOption 上传配置
* @param compressOption 压缩配置
* @param uploadCallback 上传回调
*/
void insertImages(
LinghitRichEditorUploadOption uploadOption,
LinghitRichEditorImageCompressOption compressOption,
LinghitRichEditorImageCompressCallback uploadCallback);
/**
* 批量取消上传任务
*
* @param uploadTag 上传时,指定的Tag
*/
void cancelUploadFileTasks(Object... uploadTag);
/**
* 批量取消压缩图片任务
*
* @param imageCompressTag 图片压缩时指定的Tag,如果是上传图片,则需要传
*/
void cancelCompressImageTasks(String... imageCompressTag);
/**
* 撤销
*/
void undo();
/**
* 取消撤销
*/
void redo();
/**
* 清除所有内容
*/
void clearAll();
//----------> 一些基础方法 <----------
/**
* 设置要加载的Html,一般用于后台返回Html后,重新渲染
*
* @param contents 后台返回的Html
*/
void setHtml(String contents);
/**
* 获取正在展示的Html
*/
void getHtml(OnMethodResultCallback methodResultCallback);
/**
* 获取指定位置插入的图片的Url
*
* @param position 位置
*/
void getInsertImgUrl(int position, OnMethodResultCallback callback);
//----------> 回调接口 <----------
interface AfterInitialLoadListener {
/**
* 加载完成的回调
*
* @param isReady 是否已经准备好了
*/
void onAfterInitialLoad(boolean isReady);
}
/**
* 调用JS方法获取返回值的监听
*/
interface OnMethodResultCallback {
/**
* 返回值返回时回调
*
* @param result 函数返回值
*/
void onMethodResult(String result);
}
/**
* 光标移动时回调
*/
interface OnCursorMoveListener {
/**
* 光标移动时回调
*
* @param isBold 是否为粗体
* @param isItalic 是否为斜体
* @param isUnderline 是否为下划线
* @param isDeleteLine 是否为删除线
* @param currentFont 当前Font
*/
void onCursorMove(boolean isBold, boolean isItalic, boolean isUnderline, boolean isDeleteLine, String currentFont);
}
/**
* 字体改变的监听
*/
interface OnTitleSizeChangeListener {
/**
* 当TitleSize发生改变时回调
*
* @param beforeTitleSize 之前设置的字体大小
* @param currentTitleSize 当前设置的字体大小
* @param isDefaultTitleSize 是否是默认的字体大小
*/
void onTitleSizeChange(TitleSizeEnum beforeTitleSize, TitleSizeEnum currentTitleSize, boolean isDefaultTitleSize);
}
/**
* 设置WebView初始化加载的监听
*/
void setOnInitialLoadListener(AfterInitialLoadListener listener);
/**
* 是否注册了初始化加载的监听
*
* @param listener 监听器
*/
boolean isRegisterInitialLoadListener(AfterInitialLoadListener listener);
/**
* 设置光标移动的监听
*/
void setOnCursorMoveListener(OnCursorMoveListener onCursorMoveListener);
boolean isRegisterOnCursorMoveListener(OnCursorMoveListener onCursorMoveListener);
/**
* 设置字体大小改变的监听
*/
void setOnTitleSizeChangeListener(OnTitleSizeChangeListener onTitleSizeChangeListener);
}
- 标题文字大小枚举
public enum TypeEnum {
/**
* 操作的种类,粗体、斜体、删除线等
*/
BOLD("bold"),
ITALIC("italic"),
UNDERLINE("underline"),
DELETE_LINE("deleteline"),
CURRENT_FONT("currentFont");
private String mName;
TypeEnum(String name) {
this.mName = name;
}
public String getName() {
return mName;
}
@Override
public String toString() {
return this.mName;
}
}
- 上传、压缩参数(图片上传参数)
public class LinghitRichEditorUploadOption {
private String mUploadUrl;
private Map<String, Object> mHeaderMap;
private Map<String, Object> mParamsMap;
private String mFileKey;
private List<File> mFiles;
private Object mTag;
private LinghitRichEditorUploadOption(Builder builder) {
this.mUploadUrl = builder.mUploadUrl;
this.mHeaderMap = builder.mHeaderMap == null ? new HashMap<String, Object>() : builder.mHeaderMap;
this.mParamsMap = builder.mParamsMap == null ? new HashMap<String, Object>() : builder.mParamsMap;
this.mFileKey = builder.mFileKey;
this.mFiles = builder.mFiles == null ? new ArrayList<File>() : builder.mFiles;
this.mTag = builder.mTag;
}
//...省略get方法
public static class Builder {
/**
* 上传地址Url
*/
private String mUploadUrl;
/**
* 上传时需要带的Header参数,键值对,一般上传会带token验证
*/
private Map<String, Object> mHeaderMap;
/**
* 上传时需要带的字段参数,键值对
*/
private Map<String, Object> mParamsMap;
/**
* 文件上传Key,这里必须是统一的
*/
private String mFileKey;
/**
* 需要上传的文件
*/
private List<File> mFiles;
/**
* 本次上传任务的Tag,需要手动取消上传任务时需要使用Tag来标记
*/
private Object mTag;
private Builder() {
}
/**
* 单个文件时,使用该重载
*/
public static Builder newBuilder(String uploadUrl, String fileKey, File file) {
ArrayList<File> files = new ArrayList<>();
files.add(file);
return new Builder(uploadUrl, fileKey, files);
}
/**
* 同一个Key,多个File文件时,使用该重载
*/
public static Builder newBuilder(String uploadUrl, String fileKey, File... files) {
return new Builder(uploadUrl, fileKey, Arrays.asList(files));
}
/**
* 同一个Key,多个File文件的Path
*/
public static Builder newBuilder(String uploadUrl, String fileKey, String... filePaths) {
ArrayList<File> files = new ArrayList<>();
for (String filePath : filePaths) {
files.add(new File(filePath));
}
return new Builder(uploadUrl, fileKey, files);
}
/**
* 后续再追加File参数,也是可以的
*/
public Builder addFile(String fileKey, File file) {
this.mFileKey = fileKey;
if (this.mFiles == null) {
this.mFiles = new ArrayList<>();
}
mFiles.add(file);
return this;
}
public Builder addFile(String fileKey, File... files) {
this.mFileKey = fileKey;
if (this.mFiles == null) {
this.mFiles = new ArrayList<>();
}
mFiles.addAll(Arrays.asList(files));
return this;
}
public Builder setTag(Object tag) {
this.mTag = tag;
return this;
}
public Builder setHeaderMap(Map<String, Object> headerMap) {
this.mHeaderMap = headerMap;
return this;
}
public Builder addHeader(String key, Object value) {
if (this.mHeaderMap == null) {
this.mHeaderMap = new HashMap<>();
}
mHeaderMap.put(key, value);
return this;
}
public Builder addHeader(Map<String, Object> headerMap) {
if (this.mHeaderMap == null) {
this.mHeaderMap = new HashMap<>();
}
mHeaderMap.putAll(headerMap);
return this;
}
public Builder setParamsMap(Map<String, Object> paramsMap) {
this.mParamsMap = paramsMap;
return this;
}
public Builder addParams(String key, Object value) {
if (this.mParamsMap == null) {
this.mParamsMap = new HashMap<>();
}
mParamsMap.put(key, value);
return this;
}
public Builder addParams(Map<String, Object> paramsMap) {
if (this.mParamsMap == null) {
this.mParamsMap = new HashMap<>();
}
mParamsMap.putAll(paramsMap);
return this;
}
public Builder setUploadUrl(String uploadUrl) {
mUploadUrl = uploadUrl;
return this;
}
public Builder setFilesMap(String key, List<File> files) {
this.mFiles = files;
return this;
}
/**
* 必须的3个参数
*
* @param uploadUrl 服务器上传的Url
* @param fileKey 文件key
* @param files 文件键值对
*/
public Builder(String uploadUrl, String fileKey, List<File> files) {
this.mUploadUrl = uploadUrl;
this.mFileKey = fileKey;
this.mFiles = files;
}
public LinghitRichEditorUploadOption build() {
return new LinghitRichEditorUploadOption(this);
}
}
}
下班了,下次再copy。。。。