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

新郑做网站网站策划要遵循的原则

新郑做网站,网站策划要遵循的原则,常用素材网站,深圳设计公司 电话先上效果图 分析问题 网上有很多关于这个的代码#xff0c;实现都过于复杂了#xff0c;github上甚至还看到一篇文章600多行代码#xff0c;结果一跑起来全是bug。还是自己写吧#xff01;#xff01;#xff01; 如果我们需要换行的查看全文、收起全…先上效果图 分析问题 网上有很多关于这个的代码实现都过于复杂了github上甚至还看到一篇文章600多行代码结果一跑起来全是bug。还是自己写吧 如果我们需要换行的查看全文、收起全文效果那没什么号说的因为可以直接用两个TextView然后通过判断超过行数还是没有超过行数来判断显示还是隐藏即可。这没有什么难度这里我们需要实现同一TextView实现。 要在 TextView 的部分文字上添加颜色和点击事件您可以使用 SpannableString 和 ClickableSpan 来实现。 为了避免重复代码那我们肯定是自定义View实现新建一个ScalingTextView继承AppCompatTextView class ScalingTextView(context: Context, attrs: AttributeSet?) :AppCompatTextView(context, attrs) {}然后我们需要几个参数 !--一段测试文字-- string namescaling_str这是一段ScalingTextView的折叠测试文字测试多行显示的时候是否可以”查看全文“、”收起全文“这个功能是否正常呢但是这个问题必须要超过两行才行因此我现在每打的一个字都是在凑字数你懂了吧/stringSpannableString 和 ClickableSpan 对象 private var spannableString: SpannableString? null// 创建 ClickableSpan 对象val clickableSpan object : ClickableSpan() {override fun onClick(widget: View) {// 在这里处理点击事件toggleText()}override fun updateDrawState(ds: TextPaint) {// 设置点击文字的颜色ds.color Color.BLUE// 如果不希望点击文字有下划线可以注释下面这行代码ds.isUnderlineText true}}fun toggleText() {if (isCollapsed) {// 展开文本maxLines Integer.MAX_VALUEisCollapsed false} else {// 折叠文本maxLines maxLinesCollapsedisCollapsed true}}当然还有些其他便于设置的参数例如 private var maxLinesCollapsed: Int 2//默认折叠行数private var isCollapsed: Boolean falseprivate var mOriginText: String //文本内容private ColorInt var mOriginTextColor: Int//折叠文字颜色private val DEFAULT_OPEN_SUFFIX 查看全文private val DEFAULT_CLOSE_SUFFIX 收起全文private val ellipsis ...当然这些参数我们需要通过xml里直接配置不用每次都set一堆方法对吧所以添加自定义属性 declare-styleable namescaling_text_viewattr namecontent_text formatstring/attrattr namecontent_text_color formatcolor/attr/declare-styleable然后获取这几个自定义参数大家可以自行增加这里只为演示内容 init {val typedValue context.obtainStyledAttributes(attrs, R.styleable.scaling_text_view)mOriginText typedValue.getString(R.styleable.scaling_text_view_content_text).toString()mOriginTextColor typedValue.getColor(R.styleable.scaling_text_view_content_text_color,ContextCompat.getColor(context,R.color.themeColor)).toInt()}最后我们如何实现功能呢我们可以从几个方向去分析 在文字结尾追加上“...”省略号和 查看全文、收起全文这个不难当超出最大限制行数的时候我们需要截取掉多余内容并且为“...”省略号和 查看全文、收起全文空出位置为 查看全文、收起全文添加颜色最后为 查看全文、收起全文添加点击事件最后的最后刷新文本内容 那么我们可以重写onMeasure 这里我们用到一个方法getLineEnd val lineEndIndex layout.getLineEnd(maxLinesCollapsed - 1)val newText text.subSequence(0, lineEndIndex - ellipsis.length 1 - DEFAULT_OPEN_SUFFIX.length 1).toString().trim { it } ellipsis DEFAULT_OPEN_SUFFIX创建SpannableString对象 spannableString SpannableString(newText);//设置点击事件spannableString?.setSpan(clickableSpan,newText.lastIndexOf(DEFAULT_OPEN_SUFFIX),newText.lastIndexOf(DEFAULT_OPEN_SUFFIX) DEFAULT_OPEN_SUFFIX.length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)//设置文本颜色spannableString?.setSpan(ForegroundColorSpan(mOriginTextColor),newText.lastIndexOf(DEFAULT_OPEN_SUFFIX),newText.lastIndexOf(DEFAULT_OPEN_SUFFIX) DEFAULT_OPEN_SUFFIX.length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)最后设置刷新文本 text spannableStringmovementMethod LinkMovementMethod.getInstance()super.onMeasure(widthMeasureSpec, heightMeasureSpec)好了我们搞定了完整代码 class ScalingTextView(context: Context, attrs: AttributeSet?) :AppCompatTextView(context, attrs) {private var maxLinesCollapsed: Int 2private var isCollapsed: Boolean falseprivate val TAG: String ScalingTextView::class.java.simpleNameprivate var mOriginText: Stringprivate ColorInt var mOriginTextColor: Intprivate val DEFAULT_OPEN_SUFFIX 查看全文private val DEFAULT_CLOSE_SUFFIX 收起全文private val ellipsis ...private var spannableString: SpannableString? nullinit {val typedValue context.obtainStyledAttributes(attrs, R.styleable.scaling_text_view)mOriginText typedValue.getString(R.styleable.scaling_text_view_content_text).toString()mOriginTextColor typedValue.getColor(R.styleable.scaling_text_view_content_text_color,ContextCompat.getColor(context,R.color.themeColor)).toInt()text mOriginText}// 创建 ClickableSpan 对象val clickableSpan object : ClickableSpan() {override fun onClick(widget: View) {// 在这里处理点击事件toggleText()}override fun updateDrawState(ds: TextPaint) {// 设置点击文字的颜色ds.color Color.BLUE// 如果不希望点击文字有下划线可以注释下面这行代码ds.isUnderlineText true}}fun toggleText() {if (isCollapsed) {// 展开文本maxLines Integer.MAX_VALUEisCollapsed false} else {// 折叠文本maxLines maxLinesCollapsedisCollapsed true}}override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {super.onMeasure(widthMeasureSpec, heightMeasureSpec)if (layout.lineCount maxLinesCollapsed spannableString null) {//原文本等于或者小于默认折叠行数的时候不追加点击事件等return}if (layout ! null layout.lineCount maxLinesCollapsed isCollapsed) {val lineEndIndex layout.getLineEnd(maxLinesCollapsed - 1)val newText text.subSequence(0, lineEndIndex - ellipsis.length 1 - DEFAULT_OPEN_SUFFIX.length 1).toString().trim { it } ellipsis DEFAULT_OPEN_SUFFIXspannableString SpannableString(newText);//设置点击事件spannableString?.setSpan(clickableSpan,newText.lastIndexOf(DEFAULT_OPEN_SUFFIX),newText.lastIndexOf(DEFAULT_OPEN_SUFFIX) DEFAULT_OPEN_SUFFIX.length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)//设置文本颜色spannableString?.setSpan(ForegroundColorSpan(mOriginTextColor),newText.lastIndexOf(DEFAULT_OPEN_SUFFIX),newText.lastIndexOf(DEFAULT_OPEN_SUFFIX) DEFAULT_OPEN_SUFFIX.length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)text spannableStringmovementMethod LinkMovementMethod.getInstance()super.onMeasure(widthMeasureSpec, heightMeasureSpec)}else if (layout ! null !isCollapsed) {val newText mOriginText DEFAULT_CLOSE_SUFFIXspannableString SpannableString(newText);//设置点击事件spannableString?.setSpan(clickableSpan,newText.lastIndexOf(DEFAULT_CLOSE_SUFFIX),newText.lastIndexOf(DEFAULT_CLOSE_SUFFIX) DEFAULT_CLOSE_SUFFIX.length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)//设置文本颜色spannableString?.setSpan(ForegroundColorSpan(mOriginTextColor),newText.lastIndexOf(DEFAULT_CLOSE_SUFFIX),newText.lastIndexOf(DEFAULT_CLOSE_SUFFIX) DEFAULT_CLOSE_SUFFIX.length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)text spannableStringmovementMethod LinkMovementMethod.getInstance()super.onMeasure(widthMeasureSpec, heightMeasureSpec)}}}xml里使用,这里默认是展开的你们默认隐藏的话自己实现 com.github.demo.wight.ScalingTextViewandroid:idid/scalingTextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_marginTop12dpapp:content_textstring/scaling_strapp:content_text_colorcolor/themeColor /
http://www.hkea.cn/news/14577546/

相关文章:

  • 优秀的网站设计分析装修公司加盟排行榜
  • 国外做文化的网站专业家装建材网站设计
  • 服装网站建设网wordpress数据库导致宕机
  • 网站怎么不要钱自己做网页制作设计培训
  • 做网站到八方资源网怎么样仿淘宝php c2c电子商务网站模板
  • 网站管理助手3.0电商seo搜索优化
  • 网站建设栏目标语口号成都网站建设爱特通
  • 企业网站程序带wap如何获取新注册公司电话
  • 网站设计网站建设公司云服务器多少钱一台
  • 线上推广的方式seo怎么优化效果更好
  • 网站设计开发软件网页美化工具网页设计免费模板中文
  • 网站在哪里购买网站建设 英语翻译
  • 株洲市区网站建设公司icp备案网站名称
  • 为什么做电商网站深圳福田保税区
  • 大馆陶网站好的制造公司站制作
  • 驻马店公司做网站91永久海外地域网名
  • 新余专业的企业网站建设公司wordpress投稿送积分
  • 网站建设捌金手指下拉十六响应式网站技术
  • 建设什么网站挣钱wordpress 博客系统
  • 网站建设如何导入音乐网站建设的一般步骤包含哪些
  • 黑户可做网站做帖子网站
  • 网站后端用什么语言中午网站做google广告好吗
  • 校园网站psd未备案网站 赚钱
  • 国际网站建设工具网页qq登录电脑版
  • 建设企业管理类网站网站干什么的
  • 做酒店网站多少钱如何组建网站
  • 女同性怎么做的视频网站网站设计的公司北京
  • 建站行业导航网站公司建网站带商城可以吗
  • 网站模板 源码之家网站开发与维护是什么
  • 网站建设 中企高程wordpress怎么加友链