IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 能够自定义后缀的TextView -> 正文阅读

[移动开发]能够自定义后缀的TextView

废话不多说。
此文章大部分参考了 https://github.com/TheCodeYard/EllipsizedTextView/blob/master/ellipsizedtextview/src/main/java/com/thecodeyard/ellipsizedtextview/EllipsizedTextView.kt 。改了一个小问题。
废话不多说上代码。
package com.example.testapplication;

import android.content.Context;
import android.content.res.TypedArray;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.util.AttributeSet;

import androidx.appcompat.widget.AppCompatTextView;

/**

  • see https://github.com/TheCodeYard/EllipsizedTextView/blob/master/ellipsizedtextview/src/main/java/com/thecodeyard/ellipsizedtextview/EllipsizedTextView.kt

  • 通过kt改造
    */
    public class EllipsizedTextView extends AppCompatTextView {
    private SpannableString ellipsisSpannable;
    private SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
    String ellipsis;
    int ellipsisColor;
    private static final String ELLIPSIS_NORMAL = “\u2026”; // (…)

    public EllipsizedTextView(Context context) {
    this(context,null);
    }

    public EllipsizedTextView(Context context, AttributeSet attrs) {
    this(context, attrs,0);
    }

    public EllipsizedTextView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context, attrs, defStyleAttr);

    }

    private void init(Context context, AttributeSet attrs, int defStyleAttr) {
    ellipsis = getDefaultEllipsis().toString();
    ellipsisColor = getDefaultEllipsisColor();
    if (attrs != null) {
    TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.EllipsizedTextView, 0, 0);
    ellipsis = typedArray.getString(R.styleable.EllipsizedTextView_ellipsis);
    ellipsisColor = typedArray.getColor(R.styleable.EllipsizedTextView_ellipsisColor, getDefaultEllipsisColor());
    typedArray.recycle();
    }

     ellipsisSpannable = new SpannableString(ellipsis);
     ellipsisSpannable.setSpan(new ForegroundColorSpan(ellipsisColor), 0, ellipsis.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    

    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    float availableScreenWidth = getMeasuredWidth() - getCompoundPaddingLeft() - getCompoundPaddingRight();
    float availableTextWidth = availableScreenWidth * getMaxLines();
    String ellipsizedText = TextUtils.ellipsize(getText(), getPaint(), availableTextWidth, getEllipsize()).toString();
    //如果裁剪后文字跟TextView文字不一致。需要执行替换逻辑。
    if (ellipsizedText.toString() != getText().toString()) {
    // If the ellipsizedText is different than the original text, this means that it didn’t fit and got indeed ellipsized.
    // Calculate the new availableTextWidth by taking into consideration the size of the custom ellipsis, too.
    //此处计算错误。应该是最后一行才有Ellipsize
    // availableTextWidth = (availableScreenWidth - getPaint().measureText(ellipsis)) * getMaxLines();
    if(getMaxLines()>=1) {
    availableTextWidth = availableScreenWidth * (getMaxLines() - 1) + (availableScreenWidth - getPaint().measureText(ellipsis));
    ellipsizedText = TextUtils.ellipsize(getText(), getPaint(), availableTextWidth, getEllipsize()).toString();
    int defaultEllipsisStart = ellipsizedText.indexOf(getDefaultEllipsis());
    int defaultEllipsisEnd = defaultEllipsisStart + 1;

             spannableStringBuilder.clear();
    
             // Update the text with the ellipsized version and replace the default ellipsis with the custom one.
             setText(spannableStringBuilder.append(ellipsizedText).replace(defaultEllipsisStart, defaultEllipsisEnd, ellipsisSpannable));
         }
     }
    

    }

    private String getDefaultEllipsis() {
    return ELLIPSIS_NORMAL;
    }

    private int getDefaultEllipsisColor() {
    return getTextColors().getDefaultColor();
    }
    }

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:54:07  更:2022-04-18 17:57:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 22:11:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码