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

 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/* 测试TextView点击效果 */mTextViewSetOnClickListener = (TextView) findViewById(R.id.textViewSetOnClickListener);mTextViewSetOnClickListener.setOnClickListener(new View.OnClickListener() {@Overridepublic 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;@Overrideprotected 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() {@Overridepublic 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文件中配置

    <TextViewandroid: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;@Overrideprotected 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() {@Overridepublic 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文件中配置


    <TextViewandroid: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 = {"黄药师:能不能请你喝碗酒?","盲剑客:我今天只想喝水。","黄药师:我以前好象见过你?","盲剑客:何止见过,你曾经是我最好的朋友,但是现在已经不是啦。你来这儿干什么?","黄药师:前不久,我遇到一个人,她送给我一坛酒,她说叫“醉生梦死”,喝了之后,不管以前干过什么也会全忘了。我很奇怪,为什么会有这样的酒,我喝了之后发觉真的很有效,不知你有没有兴趣试试?","盲剑客:你知道喝酒跟喝水的分别吗?酒,越喝越暖,水会越喝越寒。","黄药师:我们还会再见吗?","盲剑客:不会!","盲剑客(独白):我曾经发过誓,如果再让我碰到这个人,我一定会杀了他。但是我没有这样做, 因为我见他的时候,眼睛已经看不见东西了。",};@Overrideprotected 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);}@Overridepublic 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;}}}@Overridepublic 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.mzph.cn/news/25177.shtml

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

相关文章

PHP正则绕过解析

正则绕过 正则表达式PHP正则回溯PHP中的NULL和false回溯案例案例1案例2 正则表达式 在正则中有许多特殊的字符&#xff0c;不能直接使用&#xff0c;需要使用转义符\。如&#xff1a;$,(,),*,,.,?,[,,^,{。 这里大家会有疑问&#xff1a;为啥小括号(),这个就需要两个来转义&a…

Linux 下设置开机自启动的方法

文章目录 事先准备对于普通的 Linux对于 RedHat Enterprise Linux 9 笔者的运行环境&#xff1a; 设置成功过的 Linux&#xff1a; RedHat Enterprise Linux 9 x86_64 CentOS 8 x86_64 事先准备 进行这个教程之前&#xff0c;必须要先安装好一个 Linux 操作系统。这个 Linux…

JavaWeb 手写Tomcat底层机制

目录 一、Tomcat底层整体架构 1.简介 : 2.分析图 : 3.基于Socket开发服务端的流程 : 4.打通服务器端和客户端的数据通道 : 二、多线程模型的实现 1.思路分析 : 2.处理HTTP请求 : 3.自定义Tomcat : 三、自定义Servlet规范 1. HTTP请求和响应 : 1 CyanServletRequest …

《面试1v1》ElasticSearch基础

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

Kafka的配置和使用

目录 1.服务器用docker安装kafka 2.springboot集成kafka实现生产者和消费者 1.服务器用docker安装kafka ①、安装docker&#xff08;docker类似于linux的软件商店&#xff0c;下载所有应用都能从docker去下载&#xff09; a、自动安装 curl -fsSL https://get.docker.com | b…

Visual Studio配置PCL库

Visual Studio配置PCL库 Debug和Release配置新建项目配置属性表测试参考 Debug和Release Debug和Release的配置过程一模一样&#xff0c;唯一区别就在于最后一步插入的附加依赖项不同&#xff0c;因此下面以debug为例。 配置新建项目 1、新建一个C空项目&#xff0c;模式设置…

Linux文本三剑客之awk

目录 前言 awk 1.认识awk 2.使用awk 2.1语法 2.2常用命令选项 2.3awk变量 2.3.1内置变量 2.3.2自定义变量 2.4printf命令 awk例题 前言 awk、grep、sed是linux操作文本的三大利器&#xff0c;合称文本三剑客&#xff0c;也是必须掌握的linux命令之一。三者的功能都是…

FreeRTOS源码分析-9 互斥信号量

目录 1 优先级翻转问题 2 互斥信号量概念及其应用 2.2FreeRTOS互斥信号量介绍 2.3FreeRTOS互斥信号量工作原理 3 互斥信号量函数应用 3.1功能分析 3.2API详解 3.3功能实现 4 递归互斥信号量函数应用 4.1死锁现象 ​编辑 4.2API详解 4.3解决死锁 5 互斥信号量实现原…

C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig与zag/左右双旋/3+4重构)

本文目录 00.BBST——平衡二叉搜索树01.AVL树02.AVL的插入2.1单旋——zig 与 zag2.2插入节点后的单旋实例2.3手玩小样例2.4双旋实例2.5小结 03.AVL的删除3.1单旋删除3.2双旋删除3.3小结 04.34重构05.综合评价AVL5.1优点5.2缺点 06.代码注意插入算法删除算法完整代码&#xff1a…

关于接口测试用例设计的一些思考

接口测试发现的典型问题 传入参数处理不当&#xff0c;引起程序错误类型溢出&#xff0c;导致数据读取和写入不一致对象权限校验出错&#xff0c;可获取其他角色信息状态出错&#xff0c;导致逻辑处理出现问题逻辑校验不完善定时任务执行出错 接口测试用例设计 接口测试用例…

redis入门3-在java中操作redis

Redis的java客户端 Jedis、Lettuce、Redisson、以及spring提供的spring data redis Jedis操作redis //添加依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.0</version> </dep…

JJWT快速入门

本篇介绍使用 JJWT&#xff08;Java JWT&#xff09;库来生成 JWT Token&#xff0c;步骤如下&#xff1a; 添加依赖&#xff1a; 在项目中添加 JJWT 依赖项。对于 Maven 项目&#xff0c;可以在 pom.xml 文件中添加以下依赖项&#xff1a; <dependency><groupId>…

python解析帆软cpt及frm文件(xml)获取源数据表及下游依赖表

#!/user/bin/evn python import os,re,openpyxl 输入&#xff1a;帆软脚本文件路径输出&#xff1a;帆软文件检查结果Excel#获取来源表 def table_scan(sql_str):# remove the /* */ commentsq re.sub(r"/\*[^*]*\*(?:[^*/][^*]*\*)*/", "", sql_str)# r…

c++学习(特殊类设计)[30]

只能在堆上创建对象的类 如果你想要确保对象只能在堆上创建&#xff0c;可以通过将析构函数声明为私有&#xff0c;并提供一个静态成员函数来创建对象。这样&#xff0c;类的实例化只能通过调用静态成员函数来完成&#xff0c;而无法直接在栈上创建对象。 以下是一个示例&…

【开源项目--稻草】Day03

【开源项目--稻草】Day03 1. 续Spring-Security1.1 自定义登录界面 2. 用户注册2.1 将注册页面显示2.2 编写控制器进行测试2.3 编写注册业务逻辑2.4 注册功能的收尾 3. VUE3.1 VUE的基本使用3.1.1 什么是VUE 3.2 使用VUEAjax完善稻草问答的注册功能 1. 续Spring-Security 1.1 …

Kubespray-offline v2.21.0-1 下载 Kubespray v2.22.1 离线部署 kubernetes v1.25.6

文章目录 1. 目标2. 预备条件3. vcenter 创建虚拟机4. 系统初始化4.1 配置网卡4.2 配置主机名4.3 内核参数 5. 打快照6. 安装 git7. 配置科学8. 安装 docker9. 下载介质9.1 下载安装 docker 介质9.2 下载 kubespray-offline-ansible 介质9.3 下载 kubernetes 介质 10. 搬运介质…

6.物联网操作系统信号量

一。信号量的概念与应用 信号量定义 FreeRTOS信号量介绍 FreeRTOS信号量工作原理 1.信号量的定义 多任务环境下使用&#xff0c;用来协调多个任务正确合理使用临界资源。 2.FreeRTOS信号量介绍 Semaphore包括Binary&#xff0c;Count&#xff0c;Mutex&#xff1b; Mutex包…

【2种方法,jmeter用一个正则提取器提取多个值!】

jmeter中&#xff0c;用json提取器&#xff0c;一次提取多个值&#xff0c;这个很多人都会。但是&#xff0c;用正则提取器一次提取多个&#xff0c;是否可以呢&#xff1f; 肯定&#xff0c;很多人都自信满满的说&#xff0c;可以&#xff01;形如&#xff1a;token":&q…

Jenkins触发器时间、次数设定

触发器触发条件介绍 触发器触发条件公式&#xff1a;由5颗星组成 * * * * * 分别代表&#xff1a;分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6) 企业项目中常用场景介绍 场景1&#xff1a;接口脚本部分测试通过&#xff0c;部分还在进行&#xff0c;回归测试脚本执行…

Windows上安装 jdk 环境并配置环境变量 (超详细教程)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…