关于RichEdit的那些坑

  项目开发中用到了richedit,但是并没有用到图文的功能,只是说使用他的各种属性,集成了一个自己的超文本编辑器.

  开发遇到了各种坑,在这里跟大家分享下:

  1: 跳转编辑界面,无法获取焦点.

    通过RichEdit.focusEditor()来获取输入框的焦点.

  2: 默认字体3号字体,之前未发现.

    通过RichEdit.setFontsize('size')来设置,size可以是1-7的数字,查看文档在js中的setFontsize可以插入例如:large,small之类的标签,我试着在java中修改传入的值,但未起作用,目测暂时不能支持别的(当然可能是我自己漏了啥哈^_^);

  3: 跳转输入界面传值

    最开始以为richedit是一个webview,传值时使用load()来加载,但是使用后就获取不到焦点,不起作用了,想了想也对,richedit加载的是本地的html文件,如果你加载了别的,还怎么执行那些方法?查看方法中找到了RichEdit.setHtml();使用后解决......坑啊.

  4:项目中因为是超文本编辑器,各种标签的选中状态需要改变,所以修改源码.......学习了几天的js(本人懵逼啊,,,,,).

    第一:没有选中状态,需要在java文件的类型数组中添加.  

    public enum Type {
    BOLD, ITALIC, SUBSCRIPT, SUPERSCRIPT, STRIKETHROUGH, UNDERLINE, H1, H2, H3, H4, H5, H6}

    第二: 需要在js文件中返回的类型里面加入自己设定的类型.

        RE.enabledEditingItems = function(e) {

          

              var items = [];
      if (document.queryCommandState('bold')) {
        items.push('bold');
            }

         window.location.href = "re-state://" + encodeURI(items.join(',')); 

        }

        

  

    第三:需要在回调方法中判断是否有这些类型.

private void stateCheck(String text) {
String state = text.replaceFirst(STATE_SCHEME, "").toUpperCase(
Locale.ENGLISH);

List<Type> types = new ArrayList<Type>();
for (Type type : Type.values()) {
if (TextUtils.indexOf(state, type.name()) != -1) {
types.add(type);
}
}
if (mDecorationStateListener != null) {
mDecorationStateListener.onStateChangeListener(state, types);
}
}

    第四:如果你想要在切换焦点位置时,获取当前字段的各种标签,在activity中重写下面的方法:

    

        editText.setOnDecorationChangeListener(new RichEditor.OnDecorationStateListener() {

            @Override
            public void onStateChangeListener(String text, List<Type> types) {

            

              String s = "";
              for (Type type : types) {
                  s = s + type.name() + ",";
                }

          }
      });

     

      总结:总之richedit还是比较不错的,但是还是需要我们来完善的,希望以上内容能帮到各位.

 

posted @ 2016-05-30 15:48  夏沫琅琊  阅读(2644)  评论(0编辑  收藏  举报