[android 开源]简单富⽂本编辑器MRichEditor ,图⽂混排算个啥
⼀、前⾔
1、什么是MRichEditor
MRichEditor 是⼀款Android 开源轻量级的富⽂本编辑器,它可以根据⽤户最终撰写的⽂章创建出对应的html ⽂件。
2、可以撰写哪些内容
⽬前⽀持⽤户撰写标题、内容、图⽚(选择相册、拍照都可以),即可以根据⽤户的需要进⾏图⽂混排,⽀持对内容的添加、删除、修改。⽤户撰写图⽂混排的内容——>⽣成HTML ⽂件——>开发者拿到HTML 想⼲嘛就⼲嘛。
3、关于配置
开发者只需要简单的配置⼏⾏代码就可以实现,它还提供了近40个接⼝⽤于开发者⾃⼰定制相应的内容,它预留了⼀个便于开发者扩展功能的按钮,可以定制显⽰⽂本、图⽚以及监听单击事件。
4、关于兼容性
兼容Android2.3——>Android6.0系统的机型。
5、效果展⽰
这是使⽤MRichEditor 编写的⽂章
⼆、使⽤步骤
1、gradle 添加依赖
2、权限
3、在布局⽂件中使⽤
compile 'com.huangdali:mricheditor:1.0.1'
1
<uses-permission  android:name ="android.permission.CAMERA" /><uses-permission  android:name ="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission  android:name ="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission  android:n
ame ="android.permission.INTERNET" /><!--demo ⾥⾯需要上传⽂件,所以需要⽹络权限-->1
2
3
4
4、重写onActivityResult ⽅法
在使⽤MRichEditor 的Activity/Fragment 中重写onActivityResult ⽅法(直接复制即可)。三、Demo 演⽰
1、来个最简单的demo
先看效果图,添加标题、内容、图⽚,修改内容,预览:
由于模拟器不⽀持拍照,所以没有演⽰拍照功能,你⾃⼰可以根据上⾯的步骤简单配置⼀下就可以看到效果了。修改(单击)、删除(长按):
上代码,代码⾥⾯有注释就不⼀⼀解释了:
<com .icheditor.view.MRichEditor    android:id="@+id/mre_editor"    android:layout_width="match_parent"    android:layout_height="match_parent"></com .icheditor.view.MRichEditor >
1
2
3
4
5
6/** * 需要重写这个⽅法选择图⽚、拍照才有⽤哦 * * @param  requestCode  * @param  resultCode  * @param  data  */@Override protected  void  onActivityResult (int  requestCode, int  resultCode, Intent data) {    super .onActivityResult(requestCode, resultCode, data);    if  (resultCode == RESULT_CANCELED) {        Toast.makeText(this , "取消操作", Toast.LENGTH_LONG).show();        return ;    }    if  (requestCode == CamaraRequestCode.CAMARA_GET_IMG) {        editor.Data());    } else  if  (requestCode == CamaraRequestCode.CAMARA_TAKE
_PHOTO) {        editor.insertImg(data);    }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
javabean是干嘛的
18
19
20
最终logcat 中会打印创建的html 内容(有点长,就不贴出来了)。
2、进阶Demo
同样的先看效果图:
上代码(这⾥对Android6.0的⼿机进⾏了权限的适配,,,):
public  class  MainActivity  extends  AppCompatActivity  {    private  MRichEditor editor;    @Override    protected  void  onCreate (Bundle savedInstanceState) {        super .onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        editor = (MRichEditor) findViewById(_editor);        editor.setServerImgDir("192.168.0.107:8080/UpLoadDemo/upload");//设置图⽚存放在服务器的路径    }    /**    * 需要重写这个⽅法选择图⽚、拍照才有⽤哦    *    * @param  requestCode      * @param  resultCode      * @param  data      */    @Override    protected  void  onActivityResult (int  requestCode, int  resultCode, Intent data) {        super .onActivityResult(requestCode, resultCode, data);        if  (resultCode == RESULT_CANCELED) {            Toast.makeText(this , "取消操作", Toast.LENGTH_LONG).show();            return ;        }        if  (requestCode == CamaraRequestCode.CAMARA_GET_IMG) {            editor.Data());        } else  if  (requestCode == CamaraRequestCode.CAMARA_TAKE_PHOTO) {            editor.insertImg(data);     
  }    }    /**    * 完成    *    * @param  view      */    public  void  onFinished (View view) {        String htmlStr = ateHtmlStr();        Log.e("htmlStr", htmlStr);    }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39public  class  MainActivity  extends  AppCompatActivity  {    private  MRichEditor editor;//编辑器    private  EditText etTitle;//⽂章标题对象    private  static  final  String BASE_URL = "192.168.2.153:8080/MRichEditorDemoServer/upload.action";//⽂件上传的接⼝    private  static  final  String IMG_URL = "192.168.2.153:8080/MRichEditorDemoServer/upload";//⽂件存放的路径    @Override    protected  void  onCreate (Bundle savedInstanceState) {        super .onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        /**
1
2
3
4
5
6
7
8
9
10
11
/**        * 请求所有必要的权限----android6.0必须要动态申请权限,否则选择照⽚和拍照功能 ⽤不了哦 
      */        Instance().requestAllManifestPermissionsIfNecessary(this , new  PermissionsResultAction() {            @Override            public  void  onGranted () {//权限通过了            }            @Override            public  void  onDenied (String permission) {//权限拒绝了            }        });        initMRichEditor();//初始化编辑器    }    /**    * 初始化富⽂本编辑器    */    private  void  initMRichEditor () {        etTitle = (EditText) findViewById(_main_title);        editor = (MRichEditor) findViewById(_editor);        editor.setServerImgDir(IMG_URL);//设置图⽚存放的路径        editor.setOnPreviewBtnClickListener(new  View.OnClickListener() {            @Override            public  void  onClick (View v) {                priview();//预览            }        });    }    /**    * 预览    */    private  void  priview () {        editor.Text().toString().trim());//设置html 的标题        String htmlStr = ateHtmlStr();//创建html 字符串        AlertDialog dialog = null ;        AlertDialog.Builder builder = new  AlertDialog.Builder(MainActivity.this );        View view = View.inflate(MainActivity.this , R.layout.dialog_preiview_html, null );        final  WebView wvPreiview = (WebView) view.findViewById(R.id.wv_dialog_preiview_html);        ImageView ivClose = (ImageView) view.findViewById(R.id.iv_dialog_close);        ImageView ivRefresh = (ImageView) view.findViewById(R.id.iv_dialog_refresh);        ivRefresh.setOnClickListener(new  View.OnClickListener() {            @Override            public  void  onClick (View v) {                load();            }        });        wvPreiview.loadData(htmlStr, "text/html; charset=UTF-8", nu
ll );        builder.setView(view);        dialog = ate();        dialog.show();        final  AlertDialog finalDialog = dialog;        ivClose.setOnClickListener(new  View.OnClickListener() {            @Override            public  void  onClick (View v) {                finalDialog.dismiss();            }        });        uploadImg();//上传图⽚    }    /**
* 需要重写这个⽅法,并且加上下⾯的判断(照写即可)
111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
* 需要重写这个⽅法,并且加上下⾯的判断(照写即可)    *    * @param  requestCode      * @param  resultCode      * @param  data      */    @Override    protected  void  onActivityResult (int  requestCode, int  resultCode, Intent data) {        super .onActivityResult(requestCode, resultCode, data);        if  (resultCode == RESULT_CANCELED) {            Toast.makeText(this , "取消操作", Toast.LENGTH_LONG).show();            return ;        }        if  (requestCode == CamaraRequestCode.CAMARA_GET_IMG) {            editor.Data());        } else  if  (requestCode == CamaraRequestCode.CAMARA_TAKE_PHOTO) {            editor.insertImg(data);        }    }    /**    * 完成按钮---将⽂件和图⽚提交到服务器    *    * @param  view      */    public  void  onFinished (View view) {        editor.Text().toString().trim());//设置html 的标题,
在创建html ⽂件之前,需要将⽂章的标题(即title 标签)设置进去,之后设置⽆效.        ateHtmlStr();//创建html 字符串,会返回⼀个html 字符串.[必须调⽤,否则内容为空]        File file = HtmlFile("sdcard/test.html");//创建html ⽂件,并设置保存的路径        //添加List<File>的⽂件列表,⽤于MyHttpUtils 多⽂件上传的参数.        List<File> fileList = new  ArrayList<>();        fileList.add(file);        for  (String filePath : ImgPath()) {            fileList.add(new  File(filePath));        }        //MyHttpUtils ⽹络请求框架,详细使⽤介绍:blog.csdn/qq137722697/article/details/52843336 .        new  MyHttpUtils()                .url(BASE_URL)//⽂件上传的接⼝ (url)                .addUploadFiles(fileList)//需上传的多个⽂件                .setJavaBean(UploadResult.class)//上传完成返回的json 格式的数据对应的javabean 对象                .uploadFileMult(new  CommCallback<UploadResult>() {//执⾏多⽂件上传任务                    @Override                    public  void  onSucess (UploadResult uploadResult) {//成功之后回调                        Toast.makeText(MainActivity.this , Message(), Toast.LENGTH_SHORT).show();                    }                    @Override                    public  void  onFailed (String msg) {//失败时候回调                        Toast.makeText(MainActivity.this , msg, Toast.LENGTH_SHORT).show();                    }                });    }    /**    * 上传图⽚(这⾥⽤于实时预览,上传了图⽚才可以预览哦,否则看不到图⽚,只能看见⽂字)    */    private  void  uploadImg () {        List<File> fileList = new  ArrayList<>();        for  (String filePath : ImgPath()) {            fileList.
add(new  File(filePath));        }        new  MyHttpUtils()                .url(BASE_URL)                .addUploadFiles(fileList)737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。