【富文本之有序列表】正则实现有序列表的EditText编辑

以下为原生实现 如果你的富文本编辑更复杂可转看

Android富文本编辑器进阶版(干货,IOS可照搬逻辑)

Edittext实现功能

1.每插入一个序号累加

2.中间插入序号,后面的序号相应递增

3.中间删除序号,后面的序号相应递减

4.删除定义的有序列表样子整个删除 如<66> 删除“>”则整个删除

*不是最简单算法,我的最后一步是先替换成中间统一标签-1,然后再排序

本文以“·number、样式的有序列表为例(我现在项目需求是这样的~),也可以替换成<number>”纯数字也可看需求规则是什么

核心正则

    //让符合规则序号重新排列
    public String getOrderedList(String string) {
        String pattern = "·-\\d+、|·\\d+、";
        //先重置
        string = string.replaceAll(pattern, "·" + -1 + "、");
        //后排序
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(string);
        int i = 0;
        while (m.find()) {
            String rep = "·" + ++i + "、";//实际增加长度
            string = string.replaceFirst(m.group(), rep);
        }
        return string;
    }
    public String clearUnOrderedList(String string) {//不符合样式的皆删除
        String pattern = "·\\d+[^、]|[^·]\\d+、";
        string = string.replaceAll(pattern, "");
        return string;
    }

 

 

 

 

 

功能1:普通增加

 

  private void addPoint() {
    
        String order_tag = "\n\n·" + -1 + "、";//换两行方便看\n
        int pStart = etChat.getSelectionStart();//获取光标位置point

        int oldLen = etChat.getText().toString().length();
    
        etChat.getText().insert(pStart, order_tag);

        etChat.setText(getOrderedList(etChat.getText().toString()));
        int newLen = etChat.getText().toString().length();

        //移动光标实际增加距离
        etChat.setSelection(pStart + newLen - oldLen);

    }

功能2:中间插入

getOrderedList中已经实现,不该什么变化先占一个位置,后面统一排序

 string = string.replaceAll(pattern, "·" + -1 + "、");

 

功能3,4:删除中间排序,删除样式的一部分则整个删除

     etChat.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (before>0) {
                    int pStart = etChat.getSelectionStart();
                    int oldLen = s.toString().length();
                    etChat.needChange();
                    String newStr = clearUnOrderedList(s.toString());
                    String orderedList = getOrderedList(newStr);
                    int newLen = orderedList.length();
                    etChat.setText(orderedList);
                    etChat.setSelection(pStart + newLen - oldLen);
                }

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!对于Android文本编辑器的开发之旅,有很多方面需要考虑和实现。我将尽力为你提供一些相关的信息和指导。 首先,你需要决定使用哪种方式来实现文本编辑器。一种常见的方法是使用Android原生的Spannable类。Spannable类可以让你在文本中应用不同的样式,例如字体颜色、字体大小、粗体和斜体等。你可以通过调用其方法来设置这些样式,使文本具有文本的效果。 另一个选择是使用开源库,如RichEditor或Quill。这些库提供了更高级的功能,例如插入图片、链接和表格等。你可以根据项目需求选择适合的库来开发文本编辑器。 接下来,你需要创建一个自定义的EditText控件来实现文本编辑器。你可以扩展EditText类,并在其中处理用户输入和样式设置。*** 在用户界面方面,你可以添加一些工具栏按钮或菜单选项,让用户能够快速选择和应用样式。你还可以提供撤销和重做功能,让用户可以撤销或恢复他们所做的更改。 另外,如果你计划支持图片插入功能,你需要处理图片的选择、裁剪和插入逻辑。你可以使用Android的相机和相册API来实现这些功能,并将选择的图片插入到文本编辑器中。 最后,记得在开发过程中进行适当的测试和调试,确保文本编辑器在不同设备和屏幕尺寸上都能常工作。 希望这些信息能对你的Android文本编辑器开发之旅有所帮助!如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值