Android应用开发(6)TextView进阶用法

news2024/11/24 9:18:26

 Android应用开发学习笔记——目录索引

上一章Android应用开发(5)文本视图(TextView)介绍了文本视图(TextView)设置文本内容、设置文本大小、设置文本显示颜色。

TextView是最基础的文本显示控件,常用的基本属性和设置方法有:

XML中的属性TextView类的设置方法说明
android:textsetText设置文本内容
android:textColorsetTextColor设置文本颜色
android:textSizesetTextSize设置文本大小
android:gravitysetGravity设置文本的对齐方式

本章介绍TextView的一些有趣用法:响应点击、省略显示,跑马灯滚动显示、多行垂直滚动显示

本章用到的TextView属性与方法的介绍:

XML中的属性TextView类的设置方法说明
android:textAppearancesetTextAppearance设置文本风格
android:focusablesetFocusable设置是否获得焦点
android:focusableInTouchModesetFocusableInTouchMode设置在触摸是是否获得焦点
android:singleLinesetSingleLine设置文本内容是否为单行
android:linessetLines设置文本行数
android:maxLinessetMaxLines设置文本最大行数
android:ellipsizesetEllipsize设置文本内容超出范围后的省略方式,取值下面详细介绍
android:scrollbars-设置滚动条的方向,取值vertical/horizontal,如果不指定将不显示滚动条
-setMovementMethod设置文本移动的方式,可设置ScrollingMovementMethod,如果不设置文本无法拉动

省略方式ellipsize取值介绍:

XML中的属性TextUtils.TruncateAt类中取值说明
android:ellipsize="start"START省略号在开头
android:ellipsize="middle"MIDDLE省略号在中间
android:ellipsize="end"END省略号在末尾
android:ellipsize="marquee"MARQUEE跑马灯

一、TextView响应点击

TextView继承View,有setOnClickListener()方法,所以可以通过实现onClick()方法来响应用户点击的功能。

具体代码如下:


public class MainActivity extends AppCompatActivity {
    private final static String TAG = "lzl-test";

    private TextView mTextViewSetOnClickListener;
    private Boolean isRedColor = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /* 测试TextView点击效果 */
        mTextViewSetOnClickListener = (TextView) findViewById(R.id.textViewSetOnClickListener);
        mTextViewSetOnClickListener.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.textViewSetOnClickListener) {
                    isRedColor = !isRedColor;
                    if (isRedColor) {
                        mTextViewSetOnClickListener.setTextColor(Color.RED);
                    } else {
                        mTextViewSetOnClickListener.setTextColor(Color.BLUE);
                    }
                }
            }
        });
    }
}

二、省略显示

当一行内容太多,可以在XML中设置android:ellipsize省略显示


//省略文本开始部分,省略号在开头
android:ellipsize="start"
//省略文本中间部分,省略号在中间
android:ellipsize="middle"
//省略文本结尾部分,省略号在尾部
android:ellipsize="end"

或者在java代码中调用文本视图的setTextColor()方法设置


public class MainActivity extends AppCompatActivity {
    private final static String TAG = "lzl-test";

    private TextView mTextViewEllipsize;
    private int mCount = 0;

    private TextView mTextViewSetOnClickListener;
    private int onClickCount = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /* 测试TextView省略显示,点击改变省略方式 */
        mTextViewEllipsize = (TextView) findViewById(R.id.textViewEllipsize);
        mTextViewEllipsize.setSingleLine(true);
        mTextViewEllipsize.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.textViewEllipsize) {
                    mCount++;
                    if (mCount >= 4)
                        mCount = 1;
                    switch (mCount) {
                        case 1:
                            mTextViewEllipsize.setEllipsize(TextUtils.TruncateAt.START);
                            mTextViewEllipsize.setTextColor(Color.RED);
                            break;
                        case 2:
                            mTextViewEllipsize.setEllipsize(TextUtils.TruncateAt.MIDDLE);
                            mTextViewEllipsize.setTextColor(Color.GREEN);
                            break;
                        case 3:
                            mTextViewEllipsize.setEllipsize(TextUtils.TruncateAt.END);
                            mTextViewEllipsize.setTextColor(Color.BLUE);
                            break;
                        default:
                            break;
                    }
                }
            }
        });
    }
}

三、跑马灯滚动显示

当一行内容太多,导致无法全部显示,也不想分行显示,可以让文本从左向右已跑马灯方式滚动显示。

Layout.xml文件中配置

    <TextView
        android:id="@+id/textViewMarquee"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="来自中央气象台的最新预报,预示着“杜苏芮”的强大“威力”——7月29日至8月1日,北京、天津、河北、山东西部、河南北部、山西东部部分地区将有大暴雨,北京西部山前和南部、河北中南部等地局地有特大暴雨。气象专家特别提醒,本轮强降雨极端性强,致灾风险高。"
        android:textSize="18sp"

Java 代码中设置


public class MainActivity extends AppCompatActivity {
    private final static String TAG = "lzl-test";

    private TextView mTextViewMarquee;
    private boolean isPaused = false;

    private TextView mTextViewSetOnClickListener;
    private int onClickCount = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /* 测试TextView跑马灯滚动效果 */
        mTextViewMarquee = (TextView) findViewById(R.id.textViewMarquee);
        mTextViewMarquee.setTextColor(Color.RED);
        mTextViewMarquee.setEllipsize(TextUtils.TruncateAt.MARQUEE);
        mTextViewMarquee.requestFocus(); // 强制获得焦点,让跑马灯滚起来
        mTextViewMarquee.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.textViewMarquee) {
                    isPaused = !isPaused;
                    if (isPaused) {
                        mTextViewMarquee.setFocusable(false); // 不允许获得焦点
                        mTextViewMarquee.setFocusableInTouchMode(false); // 不允许在触摸时获得焦点
                    } else {
                        mTextViewMarquee.setFocusable(true); // 允许获得焦点
                        mTextViewMarquee.setFocusableInTouchMode(true); // 允许在触摸时获得焦点
                        mTextViewMarquee.requestFocus(); // 强制获得焦点,让跑马灯滚起来
                    }
                }
            }
        });
    }
}

四、多行垂直滚动显示

当行数固定,一直新增文本更多文本,新的文本加入到窗口尾部,窗口可以垂直滚动显示。

Layout.xml文件中配置


    <TextView
        android:id="@+id/textViewScrollable"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:lines="8"
        android:maxLines="10"
        android:text=""
        android:textSize="18sp"
        android:gravity="left|bottom"
        android:scrollbars="vertical"

Java 代码中设置

public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnLongClickListener {
    private final static String TAG = "lzl-test";

    private TextView mTextViewScrollable;
    private int mAddTextCount = 0;

    private String[] mStrings = {
            "黄药师:能不能请你喝碗酒?",
            "盲剑客:我今天只想喝水。",
            "黄药师:我以前好象见过你?",
            "盲剑客:何止见过,你曾经是我最好的朋友,但是现在已经不是啦。你来这儿干什么?",
            "黄药师:前不久,我遇到一个人,她送给我一坛酒,她说叫“醉生梦死”,喝了之后,不管以前干过什么也会全忘了。我很奇怪,为什么会有这样的酒,我喝了之后发觉真的很有效,不知你有没有兴趣试试?",
            "盲剑客:你知道喝酒跟喝水的分别吗?酒,越喝越暖,水会越喝越寒。",
            "黄药师:我们还会再见吗?",
            "盲剑客:不会!",
            "盲剑客(独白):我曾经发过誓,如果再让我碰到这个人,我一定会杀了他。但是我没有这样做, 因为我见他的时候,眼睛已经看不见东西了。",
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /* 测试TextView垂直滚动显示效果,点击添加文本,长按删除 */
        mTextViewScrollable = (TextView) findViewById(R.id.textViewScrollable);
        mTextViewScrollable.setLines(8);
        mTextViewScrollable.setMaxLines(10);
        mTextViewScrollable.setBackgroundColor(Color.GRAY);
        // 设置内部文字的对齐方式
        mTextViewScrollable.setGravity(Gravity.LEFT | Gravity.BOTTOM);
        // 设置内部文本的移动方式为滚动形式
        mTextViewScrollable.setMovementMethod(new ScrollingMovementMethod());
        mTextViewScrollable.setOnClickListener(this);
        mTextViewScrollable.setOnLongClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.textViewScrollable ) {
            Log.d(TAG, "mStrings.length:" + mStrings.length);
            String string = String.format("%s\n%s %s", mTextViewScrollable.getText().toString(), getNowTimeMs(), mStrings[mAddTextCount]);
            mTextViewScrollable.setText(string);
            mAddTextCount++;
            if (mAddTextCount >= mStrings.length) {
                mAddTextCount = 0;
            }
        }
    }

    @Override
    public boolean onLongClick(View v) {
        if (v.getId() == R.id.textViewScrollable) {
            mTextViewScrollable.setText("");
        }
        return true;
    }

    private String getNowTimeMs() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss:SSS");
        return simpleDateFormat.format(new Date());
    }
}

java 代码使用R.drawable.


TextView textView = (TextView) findViewById(R.id.textView);
textView.setBackgroundResource(R.drawable.ic_launcher_background);

四、测试程序

 完整源码

百度网盘链接:百度网盘 请输入提取码 提取码:test

TextViewTest目录textviewtest2 module

点此查看Android应用开发学习笔记的完整目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/845535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cpu的几核和几线程是什么意思

先说一下i7-12800H 14核 20线程是什么意思 答: 超线程功能先简单的解释下就是:能使一个大核拥有同时处理两个线程的能力. 14核是大小核技术,6个大核,8个小核,小核没有超线程功能 ,比大核的性能要弱些 也就是说6个大核,每个大核都同时处理2个线程, 每个小核只能同时处理…

Vue缓存字典值减少网络请求次数,解决同样参数并发请求多次

前言 在一些项目里&#xff0c;我们可能有着大量的下拉框&#xff0c;而这些下拉框的数据就来源于我们后端接口返回的字典信息。于是&#xff0c;画风可能是这样的&#xff0c;每次下拉&#xff0c;你都需要请求一次字典接口拿到这些数据&#xff0c;于是每次组件刷新都会重复…

UNIX基础知识:UNIX体系结构、登录、文件和目录、输入和输出、程序和进程、出错处理、用户标识、信号、时间值、系统调用和库函数

引言&#xff1a; 所有的操作系统都为运行在其上的程序提供服务&#xff0c;比如&#xff1a;执行新程序、打开文件、读写文件、分配存储区、获得系统当前时间等等 1. UNIX体系结构 从严格意义上来说&#xff0c;操作系统可被定义为一种软件&#xff0c;它控制计算机硬件资源&…

ClickHouse(十三):Clickhouse MergeTree系列表引擎 - ReplicingMergeTree

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

Session与Cookie的区别(五)

储存状态的方式 小明的故事说完了&#xff0c;该来把上面这一段变成网络的实际案例了。其实在网络世界中问题也是一样的。 前面已经提到过我们会把状态存在 Cookie 里面&#xff0c;让 Request 之间能够变得有关联。 假设我们今天要来做一个会员系统&#xff0c;那我要怎么知道…

24届近5年南京航空航天大学自动化考研院校分析

今天给大家带来的是南京航空航天大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、南京航空航天大学 学校简介 南京航空航天大学创建于1952年10月&#xff0c;是新中国自己创办的第一批航空高等院校之一。1978年被国务院确定为全国重点大学&#xff1b;1981年经…

Llama 2 云端部署与API调用【AWS SageMaker】

Meta 刚刚发布了 Llama 2 大模型。如果你和我们一样&#xff0c;你一定会迫不及待地想要亲自动手并用它来构建。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 使用任何类型的 LLM 进行构建的第一步是将其托管在某处并通过 API 使用它。 然后你的开发人员可以轻松地将…

Java技术整理(4)—— 多线程并发篇

1、Java 线程实现/创建方式 &#xff08;1&#xff09;继承Thread类 Thread类本质上是实现了Runnable接口的实例&#xff0c;代表一个线程的实例&#xff0c;通过start()启动&#xff0c;自动执行run()方法。 &#xff08;2&#xff09;实现Runnable接口 Runnable是一个没有…

2023 java web面试秘籍

目录 第一章&#xff1a;Java Web基础知识1.介绍3.Java Web基本概念 4.常见面试问题第二章&#xff1a;Java Web核心概念和技术1.介绍3.Servlet和JSP4.Web安全5.常见面试问题 第三章&#xff1a;Java Web高级概念和技术1.介绍3.Spring框架4.安全性5.常见面试问题 第四章&#x…

Clickhouse 数据存储

一、数据分区 数据是以分区目录的形式组织的&#xff0c;每个分区独立分开存储.这种形式&#xff0c;查询数据时&#xff0c;可以有效的跳过无用的数据文件。 1.1 数据分区的规则 分区键的取值&#xff0c;生成分区ID&#xff0c;分区根据ID决定。根据分区键的数据类型不同&am…

springboot房地产管理java购房租房二手房j客户sp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 springboot房地产管理 系统1权限&#xff1a;管理员 …

Spring Boot多级缓存实现方案

1.背景 缓存&#xff0c;就是让数据更接近使用者&#xff0c;让访问速度加快&#xff0c;从而提升系统性能。工作机制大概是先从缓存中加载数据&#xff0c;如果没有&#xff0c;再从慢速设备(eg:数据库)中加载数据并同步到缓存中。 所谓多级缓存&#xff0c;是指在整个系统架…

2、简单上手+el挂载点+v-xx(v-text、v-html、v-on、v-show、v-if、v-bind、v-for)

官网&#xff1a; vue3&#xff1a;https://cn.vuejs.org/ vue2&#xff1a;https://v2.cn.vuejs.org/v2/guide/ 简单上手&#xff1a; 流程&#xff1a; 导入开发版本的Vue.js <!--开发环境版本&#xff0c;包含了有帮助的命令行警告--> <script src"https…

【IDEA+Spark Streaming 3.4.1+Dstream监控套接字流统计WordCount保存至MySQL8】

【IDEASpark Streaming 3.4.1Dstream监控套接字流统计WordCount保存至MySQL8】 把DStream写入到MySQL数据库中 Spark 3.4.1MySQL 8.0.30sbt 1.9.2 文章目录 【IDEASpark Streaming 3.4.1Dstream监控套接字流统计WordCount保存至MySQL8】前言一、背景说明二、使用步骤1.引入库2…

一个月 PMP 3A上岸经验复盘

2023年5月参加的线下考试&#xff0c;总复习时间一个月左右&#xff0c;刷到3A小绿饼 作为拖延症晚期&#xff0b;工作任务比较多&#xff0c;所以全程没有跟上老师的复习&#xff0c;最后集中在考前一个月临时抱佛脚&#xff0c;成功上岸不是梦 下面分享一下报名和备考经验 1月…

python画小车

文章目录 import matplotlib.pyplot as plt from matplotlib.patches import Rectangle import matplotlib.transforms as transforms import numpy as np # 创建图形窗口和坐标轴对象 fig, ax = plt.subplots()# 绘制小车矩形 def plot_robot(x, y, yaw, robot_length=2, robo…

python编写ocr识别图片汉字

当你需要构建一个简单的图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;并在其中实现光学字符识别&#xff08;OCR&#xff09;功能时&#xff0c;wxPython是一个强大而灵活的选择。wxPython是一个基于Python的跨平台GUI开发框架&#xff0c;结合了wxWidgets C库…

Spring MVC项目概述及创建

Spring MVC项目概述及创建 1.什么是Spring MVC Spring MVC是基于SevletAPI的原始Web框架。Spring MVC项目也叫做SpringWeb项目。 它是在springboot项目中引入了web框架&#xff0c;原本的spring项目不具备网络通信能力&#xff0c;而spring mvc允许http响应&#xff0c;当用…

芯片热处理设备 HTR-4立式4寸快速退火炉

HTR-4立式4寸快速退火炉 HTR-4立式4寸快速退火炉&#xff08;芯片热处理设备&#xff09;广泛应用在IC晶圆、LED晶圆、MEMS、化合物半导体和功率器件等多种芯片产品的生产&#xff0c;和欧姆接触快速合金、离子注入退火、氧化物生长、消除应力和致密化等工艺当中&#xff0c;通…

调整vscode

调整vscode 连wifi linux连接wifi