[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小时内删除。
发表评论