获取textview行数

获取textview行数如果我们想获取TextView内容的行数,TextView没有提供现成的api供我们使用,需要我们自己获取。这里提供一个间接的方法,通过StaticLayout来间接获取行数。下面是代码:publicstaticintgetTextViewLines(TextViewtextView,inttextViewWidth){intwidth=textViewWidt…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

如果我们想获取TextView内容的行数,TextView没有提供现成的api供我们使用,需要我们自己获取。

这里提供一个间接的方法,通过StaticLayout来间接获取行数。

下面是代码:

public static int getTextViewLines(TextView textView, int textViewWidth) {
    int width = textViewWidth - textView.getCompoundPaddingLeft() - textView.getCompoundPaddingRight();
    StaticLayout staticLayout;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        staticLayout = getStaticLayout23(textView, width);
    } else {
        staticLayout = getStaticLayout(textView, width);
    }
    int lines = staticLayout.getLineCount();
    int maxLines = textView.getMaxLines();
    if (maxLines > lines) {
        return lines;
    }
    return maxLines;
}

/**
 * sdk>=23
 */
@RequiresApi(api = Build.VERSION_CODES.M)
private static StaticLayout getStaticLayout23(TextView textView, int width) {
    StaticLayout.Builder builder = StaticLayout.Builder.obtain(textView.getText(),
            0, textView.getText().length(), textView.getPaint(), width)
            .setAlignment(Layout.Alignment.ALIGN_NORMAL)
            .setTextDirection(TextDirectionHeuristics.FIRSTSTRONG_LTR)
            .setLineSpacing(textView.getLineSpacingExtra(), textView.getLineSpacingMultiplier())
            .setIncludePad(textView.getIncludeFontPadding())
            .setBreakStrategy(textView.getBreakStrategy())
            .setHyphenationFrequency(textView.getHyphenationFrequency())
            .setMaxLines(textView.getMaxLines() == -1 ? Integer.MAX_VALUE : textView.getMaxLines());
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        builder.setJustificationMode(textView.getJustificationMode());
    }
    if (textView.getEllipsize() != null && textView.getKeyListener() == null) {
        builder.setEllipsize(textView.getEllipsize())
                .setEllipsizedWidth(width);
    }
    return builder.build();
}

/**
 * sdk<23
 */
private static StaticLayout getStaticLayout(TextView textView, int width) {
    return new StaticLayout(textView.getText(),
            0, textView.getText().length(),
            textView.getPaint(), width, Layout.Alignment.ALIGN_NORMAL,
            textView.getLineSpacingMultiplier(),
            textView.getLineSpacingExtra(), textView.getIncludeFontPadding(), textView.getEllipsize(),
            width);
}

Jetbrains全家桶1年46,售后保障稳定

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222960.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • redis从入门到高可用 Redis复制的原理与优化

    redis从入门到高可用 Redis复制的原理与优化

    2021年11月9日
    44
  • 论SLAM技术发展趋势[通俗易懂]

    论SLAM技术发展趋势[通俗易懂]2018年7月底,深蓝学院发起并承办了“第一届全国SLAM技术论坛”。浙江大学章国锋老师、香港科技大学沈劭劼老师、上海交通大学邹丹平老师、中科院自动化所申抒含老师在“圆桌论坛:SLAM技术发展趋势”上分享了SLAM技术的趋势,现将内容整理公布,希望更多SLAMer受益。章国锋:由于我的研究方向更偏向于视觉SLAM,所以我会从我的角度来讲一讲SLAM技术的发展趋势。首先,我认为无论是视觉…

    2022年10月1日
    4
  • 取反是什么意思_1取反是多少

    取反是什么意思_1取反是多少很多编程语言使用~作为一元按位取反(NOT)操作符,Go重用^XOR操作符来按位取反://错误的取反操作funcmain(){fmt.Println(~2)//bitwisecomplementoperatoris^}//正确示例funcmain(){varduint8=2fmt.Printf(“%08b\n”,d)//00000010fmt.Printf(“%08b\n”

    2022年8月14日
    9
  • cisco 路由器15.0版本和12.0版本NAT配置有点差别

    cisco 路由器15.0版本和12.0版本NAT配置有点差别

    2021年8月22日
    63
  • cmake快速入门「建议收藏」

    cmake快速入门「建议收藏」简介cmake是kitware公司以及一些开源开发者在开发几个工具套件(VTK)的过程中所产生的衍生品。后来经过发展,最终形成体系,在2001年成为一个独立的开放源代码项目。其官方网站是www.cmake.org,可以通过访问官方网站来获得更多关于cmake的信息,而且目前官方的英文文档比以前有了很大的改进,可以作为实践中的参考手册。下载和安装以及使用:https://fukun.org/archives/0421949.html一、为何要使用项目构建工具?……

    2022年7月15日
    21
  • C#接口知识大全收藏建议收藏

    第一节接口慨述接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定,就可以抛开编程语言的限制(理论上)。接口可以从多个基接口继承,而类或结构可

    2021年12月21日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号