代码地址如下:
http://www.demodashi.com/demo/14883.html

####一、运行效果图

####二、代码具体实现

1.引入richeditor-android
richeditor-android需要的jar:
implementation 'jp.wasabeef:richeditor-android:1.2.2'这是一个Dialog框架,demo中不想自己去写,所以就使用了第三方
implementation 'com.afollestad.material-dialogs:core:0.9.6.0'
2.引入控件RichEditor
<jp.wasabeef.richeditor.RichEditorandroid:id="@+id/editor"android:layout_width="match_parent"android:layout_height="wrap_content" />
3.使用到的权限

如果拍照需要相机权限,选择图片需要SD卡权限,插入网络图片需要网络权限

<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:name="android.permission.INTERNET" />
4.初始化RichEditor
mEditor = (RichEditor) findViewById(R.id.editor);//初始化编辑高度
mEditor.setEditorHeight(200);
//初始化字体大小
mEditor.setEditorFontSize(22);
//初始化字体颜色
mEditor.setEditorFontColor(Color.BLACK);
//mEditor.setEditorBackgroundColor(Color.BLUE);//初始化内边距
mEditor.setPadding(10, 10, 10, 10);
//设置编辑框背景,可以是网络图片
//mEditor.setBackground("https://raw.githubusercontent.com/wasabeef/art/master/chip.jpg");
// mEditor.setBackgroundColor(Color.BLUE);
mEditor.setBackgroundResource(R.drawable.bg);
//设置默认显示语句
mEditor.setPlaceholder("Insert text here...");
//设置编辑器是否可用
mEditor.setInputEnabled(true);
5.实时监听Editor输入内容
mPreview = (TextView) findViewById(R.id.preview);mEditor.setOnTextChangeListener(new RichEditor.OnTextChangeListener() {@Overridepublic void onTextChange(String text) {mPreview.setText(text);}});
6.功能方法
     /*** 撤销当前标签状态下所有内容*/findViewById(R.id.action_undo).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.undo();}});/*** 恢复撤销的内容*/findViewById(R.id.action_redo).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.redo();}});/*** 加粗*/findViewById(R.id.action_bold).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();mEditor.setBold();}});/*** 斜体*/findViewById(R.id.action_italic).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();mEditor.setItalic();}});/*** 下角表*/findViewById(R.id.action_subscript).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();if (mEditor.getHtml() == null) {return;}mEditor.setSubscript();}});/*** 上角标*/findViewById(R.id.action_superscript).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();if (mEditor.getHtml() == null) {return;}mEditor.setSuperscript();}});/*** 删除线*/findViewById(R.id.action_strikethrough).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();mEditor.setStrikeThrough();}});/***下划线*/findViewById(R.id.action_underline).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();mEditor.setUnderline();}});/*** 设置标题(1到6)*/findViewById(R.id.action_heading1).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setHeading(1);}});findViewById(R.id.action_heading2).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setHeading(2);}});findViewById(R.id.action_heading3).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setHeading(3);}});findViewById(R.id.action_heading4).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setHeading(4);}});findViewById(R.id.action_heading5).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setHeading(5);}});findViewById(R.id.action_heading6).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setHeading(6);}});/*** 设置字体颜色*/findViewById(R.id.action_txt_color).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();new MaterialDialog.Builder(MainActivity.this).title("选择字体颜色").items(R.array.color_items).itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() {@Overridepublic boolean onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {dialog.dismiss();switch (which) {case 0://红mEditor.setTextColor(Color.RED);break;case 1://黄mEditor.setTextColor(Color.YELLOW);break;case 2://蓝mEditor.setTextColor(Color.GREEN);break;case 3://绿mEditor.setTextColor(Color.BLUE);break;case 4://黑mEditor.setTextColor(Color.BLACK);break;}return false;}}).show();}});findViewById(R.id.action_bg_color).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();new MaterialDialog.Builder(MainActivity.this).title("选择字体背景颜色").items(R.array.text_back_color_items).itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() {@Overridepublic boolean onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {dialog.dismiss();switch (which) {case 0://红mEditor.setTextBackgroundColor(Color.RED);break;case 1://黄mEditor.setTextBackgroundColor(Color.YELLOW);break;case 2://蓝mEditor.setTextBackgroundColor(Color.GREEN);break;case 3://绿mEditor.setTextBackgroundColor(Color.BLUE);break;case 4://黑mEditor.setTextBackgroundColor(Color.BLACK);break;case 5://透明mEditor.setTextBackgroundColor(R.color.transparent);break;}return false;}}).show();}});/*** 向右缩进*/findViewById(R.id.action_indent).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();mEditor.setIndent();}});/*** 向左缩进*/findViewById(R.id.action_outdent).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();mEditor.setOutdent();}});/***文章左对齐*/findViewById(R.id.action_align_left).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();mEditor.setAlignLeft();}});/*** 文章居中对齐*/findViewById(R.id.action_align_center).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setAlignCenter();}});/*** 文章右对齐*/findViewById(R.id.action_align_right).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setAlignRight();}});/*** 无序排列*/findViewById(R.id.action_insert_bullets).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setBullets();}});/*** 有序排列*/findViewById(R.id.action_insert_numbers).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setNumbers();}});/*** 引用*/findViewById(R.id.action_blockquote).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.setBlockquote();}});/*** 插入图片*/findViewById(R.id.action_insert_image).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();ActivityCompat.requestPermissions(MainActivity.this, mPermissionList, 100);}});/*** 插入连接*/findViewById(R.id.action_insert_link).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new MaterialDialog.Builder(MainActivity.this).title("将输入连接地址").items("http://blog.csdn.net/huangxiaoguo1").itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() {@Overridepublic boolean onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {dialog.dismiss();mEditor.focusEditor();mEditor.insertLink("http://blog.csdn.net/huangxiaoguo1","http://blog.csdn.net/huangxiaoguo1");return false;}}).show();}});/*** 选择框*/findViewById(R.id.action_insert_checkbox).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mEditor.focusEditor();mEditor.insertTodo();}});/*** 获取并显示Html*/findViewById(R.id.tv_showhtml).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(v.getContext(), WebViewActivity.class);intent.putExtra("contextURL", mEditor.getHtml());startActivity(intent);}});
7.插入图片并使用屏幕宽度

权限,我这里只是选着图片,关于拍照的自己可以去实现String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};
@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {case 100:boolean writeExternalStorage = grantResults[0] == PackageManager.PERMISSION_GRANTED;boolean readExternalStorage = grantResults[1] == PackageManager.PERMISSION_GRANTED;if (grantResults.length > 0 && writeExternalStorage && readExternalStorage) {getImage();} else {Toast.makeText(this, "请设置必要权限", Toast.LENGTH_SHORT).show();}break;}}private void getImage() {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {startActivityForResult(new Intent(Intent.ACTION_GET_CONTENT).setType("image/*"),REQUEST_PICK_IMAGE);} else {Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);intent.addCategory(Intent.CATEGORY_OPENABLE);intent.setType("image/*");startActivityForResult(intent, REQUEST_PICK_IMAGE);}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == Activity.RESULT_OK) {switch (requestCode) {case REQUEST_PICK_IMAGE:if (data != null) {String realPathFromUri = RealPathFromUriUtils.getRealPathFromUri(this, data.getData());mEditor.insertImage("https://unsplash.it/2000/2000?random&58","huangxiaoguo\" style=\"max-width:100%");mEditor.insertImage(realPathFromUri, realPathFromUri + "\" style=\"max-width:100%");
//                        mEditor.insertImage(realPathFromUri, realPathFromUri + "\" style=\"max-width:100%;max-height:100%");} else {Toast.makeText(this, "图片损坏,请重新选择", Toast.LENGTH_SHORT).show();}break;}}}

注意这里 “\” style=\”max-width:100%”是让我们从手机选择的图片和网络加载的图片适配屏幕宽高,解决图片太大显示不全问题!
####三、项目代码结构目录图

####四、参考文章
richeditor-android github地址:https://github.com/wasabeef/richeditor-android
关于如何获得手机图片真正地址(realPathFromUri )请看:http://blog.csdn.net/huangxiaoguo1/article/details/78983582
移动端强大的富文本编辑器richeditor-android

代码地址如下:
http://www.demodashi.com/demo/14883.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

移动端强大的富文本编辑器richeditor-android相关推荐

  1. 推荐一款十分强大的富文本编辑器

    项目地址 https://github.com/slatejsx/slatejsx 简介 整个富文本编辑器在slatejs基础上开发,完全支持富文本.图片.表格(支持合并.拆分单元格).视频.横线等常 ...

  2. 10个免费的javascript富文本编辑器(jQuery and non-jQuery)

    本文介绍了10个免费易用富文本编辑器(rich text editors,RTE),其中5个是Jquery插件,另外5个是非Jquery富文本编辑器 简介 Javascript富文本编辑器使我们添加. ...

  3. 10个免费的jQuery富文本编辑器

    原文地址:https://blog.csdn.net/lzwglory/article/details/17206689 Javascript富文本编辑器使我们添加.编辑网站中的文章更加方便和容易.这 ...

  4. 终于搞定了stackoverflow的富文本编辑器pagedown

    原创不易,转载请注明出处:终于搞定了stackoverflow的富文本编辑器pagedown 这个编辑器在最代码平台上运行了大半年发现确实很多人不喜欢,所以选择了ckedidor 来show下非常符合 ...

  5. 现代化富文本编辑器 Quill Editor

    介绍 近期在弄富文本编辑器相关的内容,其中项目中使用了 Quill Editor(后面简称 Quill).Quill 自称是一个现代化强大的富文本编辑器,它与其它富文本编辑器(例如 UEditor)不 ...

  6. 现代富文本编辑器Quill的内容渲染机制

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...

  7. web文本编辑器php源码,超级轻量web富文本编辑器HandyEditor

    HandyEditor 是一套十分轻量且同时适用于手机端和pc端的web富文本编辑器,主要用于让用户在网站上获得所见即所得编辑效果,可以用 HandyEditor 把传统的多行文本输入框(textar ...

  8. 富文本编辑器粗略介绍

    1.富文本编辑器的意义 普通的文本框(如input, text)只能输入纯文本以及 Emoji(只不过是特殊编码的文本),如果只是简简单单写些纯文本的内容(比如表单,简单的评论等),这是一个非常不错的 ...

  9. vue3使用jodit富文本编辑器,自定义各项配置及组件封装

    目录 常用配置 设置中文 字体设置 CDN的引用 图片上传 对编辑器中生成的元素添加默认属性 组件封装 本文使用时的版本: "vue": "^3.2.36", ...

  10. jq富文本_10个免费的jQuery富文本编辑器

    Javascript富文本编辑器使我们添加.编辑网站中的文章更加方便和容易.这些富文本编辑器提供了所见即所得(What You See Is What You Get - WYSIWYG)的功能,可以 ...

最新文章

  1. Web开发之Goahead
  2. Duo js 一个非常酷的前端打包工具
  3. 【NOIP2013模拟】黑魔法师之门
  4. tensorflow省钱方案-ml-engine
  5. 在ubuntu 12.04上安装tomcat 7.40
  6. 推动Windows的限制:句柄
  7. ubuntun 16.04 protobuf安装过程
  8. Git-简单安装与使用
  9. 几款远程工具介绍(Xshell)(SecureCRT)(putty)
  10. ora-30926:无法在源表中获得一组稳定的行
  11. 两步集成TV移动框架,从未如此简单
  12. 黑客攻击行为特征分析 反攻击技术综合性分析报告
  13. AWS API Gateway Swagger定义
  14. java 观察者模式类图_设计模式——观察者模式
  15. Windows搭建SFTP文件服务器
  16. 北京工商专修学校计算机学院院长,北京工商大学计算机学院
  17. 阿里8年测试老鸟教你软件测试工程师简历,技术栈,项目经验怎么写
  18. 人无远虑必有近忧,90后的我如何姑娘熬成婆
  19. 红旗linux系统服务器,红旗linux11系统
  20. linux下下载各种软件合集!!!

热门文章

  1. Unreal 凹多边形三角化
  2. java 读usb口 用POS-58 90U 打印
  3. POSTman安装步骤
  4. 网狐荣耀微星棋牌系列搭建教程
  5. node 请求内网_Nodejs轻松搭建局域网服务器
  6. mac flutter开发环境 flutter环境变量的配置
  7. GMSK调制 MATLAB代码
  8. tp5商城购物系统(后台管理+个人中心+购物车)
  9. 常用的几种视频格式(最详细的解释)
  10. oracle怎么查询临时表空间大小,如何查看oracle临时表空间当前使用了多少空间的大小...