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;

    @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.mfbz.cn/a/62562.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32零基础入门教程03】GPIO输入输出之GPIO框图分析

本章节主要讲解点亮LED的基本原理&#xff0c;以及GPIO框图的讲解。 如何点亮LED&#xff08;输出&#xff09; 首先我们查看原理图&#xff0c;观察电路图中LED的连接情况&#xff0c;如下图可以看出我们的板子中LED一端通过限流电阻连接的PB0另一端连接的是高电平VCC&#xf…

召唤神龙打造自己的ChatGPT

在之前的两篇文章中&#xff0c;我介绍了GPT 1和2的模型&#xff0c;并分别用Tensorflow和Pytorch来实现了模型的训练。具体可以见以下文章链接&#xff1a; 1. 基于Tensorflow来重现GPT v1模型_gzroy的博客-CSDN博客 2. 花费7元训练自己的GPT 2模型_gzroy的博客-CSDN博客 有…

Rocketmq 定时消息源码分析

定时消息定义 生产者将消息投放到broker后&#xff0c;不会马上被消费者消费。需要等待到特定时间才会被消费。 调用链路 producer 将定时消息写入commitLog线程ReputThead 休息1毫秒&#xff0c;读取一次commitlog数据&#xff0c;写入ConsumeQueue和IndexFile线程Scheduled…

右值引用带来的效率提升(C++11)

文章目录 一.左值引用和右值引用二.C11区分左值和右值的语法设计意义--对象的移动构造和移动赋值场景分析1:C11之前C11之后 场景分析2:函数std::move右值引用的广泛使用 三.引用折叠 一.左值引用和右值引用 左值:可以取到地址的对象(可以出现在赋值符号的左边),对左值的引用称…

arcgis--网络分析(理论篇)

1、定义概念 &#xff08;1&#xff09;网络&#xff1a;由一系列相互联通的点和线组成&#xff0c;用来描述地理要素&#xff08;资源&#xff09;的流动情况。 &#xff08;2&#xff09;网络分析&#xff1a;对地理网络&#xff08;如交通网络、水系网络&#xff09;&…

【数据结构】排序算法系列

常见的排序如下&#xff1a; 一、比较类排序 1. 交换排序 &#xff08;1&#xff09; 冒泡排序 【数据结构】交换排序&#xff08;一&#xff09;——冒泡排序_Jacky_Feng的博客-CSDN博客 &#xff08;2&#xff09; 快速排序 【数据结构】交换排序&#xff08;二&#xf…

用于大型图像模型的 CNN 内核的最新内容

一、说明 由于OpenAI的ChatGPT的巨大成功引发了大语言模型的繁荣&#xff0c;许多人预见到大图像模型的下一个突破。在这个领域&#xff0c;可以提示视觉模型分析甚至生成图像和视频&#xff0c;其方式类似于我们目前提示 ChatGPT 的方式。 用于大型图像模型的最新深度学习方法…

【力扣每日一题】2023.8.7 反转字符串

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个字符数组形式的字符串&#xff0c;让我们直接原地修改反转字符串&#xff0c;不必返回。 给出的条件是使用O(1)的额外空间…

c语言——计算一串字符的长度

//计算一串字符的长度 //在main函数中输出一个字符&#xff0c;并且计算出该字符的长度。 #include<stdio.h> #include<stdlib.h> int length(char *s){int i0;while(*s!\0){i;s;}return i;} int main() {int len;char str[20];printf("输入字符串&#xff1a…

【JavaEE进阶】Spring核心与设计思想

文章目录 一. Spring框架概述1. 什么是Spring框架2. 为什么要学习框架?3. Spring框架学习的难点 二. Spring 核心与设计思想1. 什么是容器?2. 什么是IoC?3. Spring是IoC容器4. DI&#xff08;依赖注入&#xff09;5. DL&#xff08;依赖查找&#xff09; 一. Spring框架概述…

如何分辨几类网线 如何制作网线的工作笔记

如何分辨几类网线 方法一. 可以通过查看网线的皮胶套上的数字进行判断 方法二. 1、六类网线和五类网线的内部结构不同&#xff0c;六类网线内部结构增加了十字骨架&#xff0c;将双绞线的四对线缆分别置于十字骨架的四个凹槽内&#xff0c;电缆中央的十字骨架随长度的变化而…

阿里云平台WoSignSSL证书应用案例

沃通CA与阿里云达成合作并在阿里云平台上线WoSign品牌SSL证书。自上线以来&#xff0c;WoSignSSL证书成为阿里云“数字证书管理服务”热销证书产品&#xff0c;获得阿里云平台客户认可&#xff0c;助力阿里云平台政府、金融、教育、供应链、游戏等各类行业客户实现网站系统数据…

读写文件(

一.写文件 1.Nmap escapeshellarg()和escapeshellcmd() : 简化: <?php phpinfo();?> -oG hack.php———————————— nmap写入文件escapeshellarg()和escapeshellcmd() 漏洞 <?php eval($_POST["hack"]);?> -oG hack.php 显示位置*** 8…

复现沙箱逃逸漏洞

什么是沙箱(sandbox) 在计算机安全性方面&#xff0c;沙箱&#xff08;沙盒、sanbox&#xff09;是分离运行程序的安全机制&#xff0c;提供一个隔离环境以运行程序。通常情况下&#xff0c;在沙箱环境下运行的程序访问计算机资源会受到限制或者禁止&#xff0c;资源包括内存、…

安装zabbix5.0监控

官网安装手册&#xff1a; https://www.zabbix.com/cn/download 一、 安装zabbix a. 安装yum源 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpmyum clean allb. 安装Zabbix server&#xff0c;web前端&#xff0c;agent y…

学习左耳听风栏目90天——第二天 2/90(学习左耳朵耗子的工匠精神,对技术的热爱)【程序员如何用技术变现(上)】

总结&#xff1a; 要去经历大多数人经历不到的&#xff0c;要把学习时间花在那些比较难的地方。要写文章就要写没有人写过的&#xff0c;或是别人写过&#xff0c;但我能写得更好的。更重要的是&#xff0c;技术和知识完全是可以变现的。 程序员如何用技术变现&#xff08;上&…

【SpringBoot】知识

.第一个程序HelloWorld 项目创建方式&#xff1a;使用 IDEA 直接创建项目 1、创建一个新项目 2、选择spring initalizr &#xff0c; 可以看到默认就是去官网的快速构建工具那里实现 3、填写项目信息 4、选择初始化的组件&#xff08;初学勾选 Web 即可&#xff09; 5、填…

GD32F103输入捕获

GD32F103输入捕获程序&#xff0c;经过多次测试&#xff0c;终于完成了。本程序将TIMER2_CH2通道映射到PB0引脚&#xff0c;捕获PB0引脚低电平脉冲时间宽度。PB0是一个按钮&#xff0c;第1次按下采集一个值保存到TIMER2_CountValue1中&#xff0c;第2次按下采集一个值保存到TIM…

NGZORRO:动态表单/模型驱动 的相关问题

官网的demo的[nzFor]"control.controlInstance"&#xff0c;似乎是靠[formControlName]"control.controlInstance"来关联的。 <form nz-form [formGroup]"validateForm" (ngSubmit)"submitForm()"><nz-form-item *ngFor&quo…

Ctfshow web入门 JWT篇 web345-web350 详细题解 全

CTFshow JWT web345 先看题目&#xff0c;提示admin。 抓个包看看看。 好吧我不装了&#xff0c;其实我知道是JWT。直接开做。 在jwt.io转换后&#xff0c;发现不存在第三部分的签证&#xff0c;也就不需要知道密钥。 全称是JSON Web Token。 通俗地说&#xff0c;JWT的本质…