当前位置: 首页 > news >正文

江苏运营网站建设业务wordpress远程图片不能

江苏运营网站建设业务,wordpress远程图片不能,阳谷网站开发,wordpress优秀的破解主题一、背景及样式效果 因项目需要#xff0c;需要文本编辑时#xff0c;支持项目符号#xff08;无序列表#xff09;尝试了BulletSpan#xff0c;但不是很理想#xff0c;并且考虑到影响老版本回显等因素#xff0c;最终决定自定义一个BulletEditText。 先看效果需要文本编辑时支持项目符号无序列表尝试了BulletSpan但不是很理想并且考虑到影响老版本回显等因素最终决定自定义一个BulletEditText。 先看效果 视频效果 二、自定义View BulletEditText         自定义控件BulletEditText源码 package com.ml512.widgetimport android.content.Context import android.util.AttributeSet import androidx.core.widget.doOnTextChanged/*** Description: 简单支持项目号的文本编辑器* Author: Marlon* CreateDate: 2024/2/1 17:44* UpdateRemark: 更新说明* Version: 1.0*/ class BulletEditText : androidx.appcompat.widget.AppCompatEditText {/*** 是否开启项目符号*/private var isNeedBullet: Boolean false/*** 项目符号*/private var bulletPoint: String • /*** 项目符号占用字符数方便设置光标位置*/private var bulletOffsetIndex bulletPoint.length/*** 相关监听回调*/private var editListener: EditListener? nullconstructor(context: Context) : super(context)constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context,attrs,defStyleAttr)init {this.doOnTextChanged { text, start, before, count -//如果是关闭状态不做格式处理if (!isNeedBullet) {returndoOnTextChanged}if (count before) {//处理项目号逻辑var offset 0var tmp text.toString()//连续回车去掉项目符号if (start bulletOffsetIndex tmp.substring(start, start count) \n) {val preSub tmp.substring(start - bulletOffsetIndex, start)if (preSub bulletPoint) {changeBulletState(false)tmp tmp.replaceRange(start-bulletOffsetIndex, start count, )offset - bulletOffsetIndex 1setTextAndSelection(tmp, start count offset)returndoOnTextChanged}}//加入项目符号if (tmp.substring(start, start count) \n) {changeBulletState(true)tmp tmp.replaceRange(start, start count, \n$bulletPoint)offset bulletOffsetIndexsetTextAndSelection(tmp, start count offset)}}}}override fun onSelectionChanged(selStart: Int, selEnd: Int) {super.onSelectionChanged(selStart, selEnd)//复制选择时直接返回关闭项目符号if (selStart ! selEnd) {changeBulletState(false)return}//判断当前段落是否有项目号有开启没有关闭val tmp text.toString()val prefix tmp.substring(0, selectionStart)if (prefix.isEmpty()) {changeBulletState(false)return}if (prefix.startsWith(bulletPoint) !prefix.contains(\n)) {changeBulletState(true)return}val lastEnterIndex prefix.lastIndexOf(\n)if (lastEnterIndex ! -1 lastEnterIndex bulletOffsetIndex 1 prefix.length) {val mathStr prefix.substring(lastEnterIndex, lastEnterIndex bulletOffsetIndex 1)if (mathStr \n$bulletPoint) {changeBulletState(true)return}}changeBulletState(false)}/*** 更新bullet状态*/private fun changeBulletState(isOpen: Boolean) {isNeedBullet isOpeneditListener?.onBulletStateChange(isOpen)}/*** 设置是否开启项目号*/fun setBullet(isOpen: Boolean) {isNeedBullet isOpenval tmp text.toString()var index selectionStartvar prefix tmp.substring(0, index)val suffix tmp.substring(index)//加项目号if (isOpen) {//首个段落if (!prefix.contains(\n) prefix.startsWith(bulletPoint)) {return}index bulletOffsetIndexif (prefix.isEmpty() || (!prefix.contains(\n) !prefix.startsWith(bulletPoint))) {setTextAndSelection($bulletPoint$prefix$suffix, index)return}prefix prefix.replaceLast(\n, \n$bulletPoint)setTextAndSelection($prefix$suffix, index)return}//去掉项目号if (prefix.startsWith(bulletPoint) !prefix.contains(\n$bulletPoint)) {//首行逻辑index - bulletOffsetIndexprefix prefix.replaceLast(bulletPoint, )setTextAndSelection($prefix$suffix, index)return}if (prefix.contains(\n$bulletPoint)) {index - bulletOffsetIndexprefix prefix.replaceLast(\n$bulletPoint, \n)setTextAndSelection($prefix$suffix, index)}}/*** 设置文本及光标位置*/private fun setTextAndSelection(text: String, index: Int) {setText(text)setSelection(index)}/*** 替换最后一个字符*/private fun String.replaceLast(oldValue: String, newValue: String): String {val lastIndex lastIndexOf(oldValue)if (lastIndex -1) {return this}val prefix substring(0, lastIndex)val suffix substring(lastIndex oldValue.length)return $prefix$newValue$suffix}/*** 设置监听*/fun setEditListener(listener: EditListener) {editListener listener}/*** 监听回调*/interface EditListener {/*** 项目符号开关状态变化*/fun onBulletStateChange(isOpen: Boolean)} } 三、调用 使用时一个项目符号的按钮开关设置调用setBullet(isOpen: Boolean) 设置是否开启项目符号同时实现一个setEditListener(listener: EditListener)根据光标位置判断当前段落是否含有项目符号并回显按钮状态。 com.ml512.widget.BulletEditTextandroid:idid/etInputandroid:layout_widthmatch_parentandroid:layout_height200dpandroid:layout_belowid/tvTitleandroid:layout_marginStart15dpandroid:layout_marginTop15dpandroid:layout_marginEnd15dpandroid:layout_marginBottom15dpandroid:autofillHintsnoandroid:backgrounddrawable/shape_edit_bgandroid:gravitytopandroid:hintstring/text_please_input_some_worldsandroid:inputTypetextMultiLineandroid:padding15dpandroid:textColorcolor/blackandroid:textColorHintcolor/color_FF_999999android:textSize16sp / //点击按钮设置添加/取消项目符号tvBullet.setOnClickListener {tvBullet.isSelected !tvBullet.isSelectedetInput.setBullet(tvBullet.isSelected)}//项目符号状态监听回显到按钮etInput.setEditListener(object :BulletEditText.EditListener{override fun onBulletStateChange(isOpen: Boolean) {tvBullet.isSelected isOpen}}) 大功告成
http://www.hkea.cn/news/14489792/

相关文章:

  • 建网站卖产品怎么样wordpress主题修改
  • 网站制作及实现管理系统平台
  • 网站优化分析在工商网上怎么注册公司
  • 亚马逊全球开店官方网站专业建设思路
  • 网站建设120东莞建设网东莞市住房和城乡
  • 龙岩一中网站建立网站
  • 酷炫的网站模板免费下载教育机构
  • 素材解析网站搭建python做个人网站
  • 寻找东莞微信网站建设做英语在线翻译兼职网站
  • 凡科建的网站怎么样建设银行信用卡官网站首页
  • 山东电商网站建设wordpress 安装旧版本
  • 响应式网站什么意思网站建设企业资质等级
  • 宁德建设网站58同城网站模板下载
  • 无锡市建设培训中心网站win10 网站建设软件
  • 阎良做网站西安做网站的公司在哪
  • 网站设计公司杭州asp.net网站搬迁到移动终端
  • 成都营销型网站建设及推广那家好文化建设的具体措施
  • 专业网站建设平台代理商浙江建设厅网站首页
  • 17网站一起做网店档口出租购物平台官网
  • 网站安全检测可以监测哪些内容风险信息wordpress 页面标签
  • app软件开发就是网站开发吗住建城乡建设部网站证件查询
  • 广州企业网站制作公司网站建设服务器对比
  • asp.net 网站的头部和底部怎么来做 includesem优化案例
  • wordpress网站没有阅读量音乐APP网站开发
  • 网站内容建设的布局和结构网站型营销
  • 网站建设校长信箱设计方案建设一个旅游网站
  • 国外免费建站网站wordpress用图床好还是
  • 图片站wordpress模板下载视频网站开发书籍
  • 威海网站开发怎么设计一个网站
  • 专业外贸公司网站合肥做公司网站