【Code-Snippet】TextView

1. TextView文字过长,显示省略号

【参考】

必须要同时设置XML和JAVA,而且,java中设置文字必须是在最后。

android:ellipsize="start|end|middle"    //省略号的位置
android:singleLine="true"
android:lines="2"						//行数
复制代码
tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
tv.setSingleLine(true);
tv.setEllipsize(null); // 展开
tv.setEllipsize(TextUtils.TruncateAt.END); // 收缩
tv.setText("");
复制代码

2. TextView文字中间加横线

【参考】

tv_goods_price = (TextView) v.findViewById(R.id.tv_goods_price);
tv_goods_price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
//底部加横线:
tv_goods_price.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
复制代码

3. 设置Drawable,改变大小

Java代码中设置Drawable,而且可以设置大小,通过drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight())

Drawable drawable= getResources().getDrawable(R.drawable.gray_circle);  
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); //设置大小textView.setCompoundDrawables(drawable, null, null, null);  //左上右下 
textView.setCompoundDrawablePadding(4);//设置图片和text之间的间距
复制代码

4. 设置字体大小

xml中直接写单位即可:

使用android:textSize属性设置,例如
android:textSize="15sp"
复制代码

代码中:

1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15); //单位最好使用SP
2.btnFind.setTextSize(TypedValue.COMPLEX_UNIT_SP,getResources().getDimension(R.dimen.home_top_txt_selected));
复制代码

SP和DP的差别,SP可以随系统设置的字体大小而改变。如果不想随系统字体大小的改变而改变,可以用DP去声明。

5. 文本显示可点击链接,部分字体变色,下划线

1)普通的网页,邮箱地址等

原生有一个字段,autoLink,

autoLink 一共有六个值 :web phone map email all none 分别是url链接 电话号码提取拨号 地图地址 电子邮件 all是能够支持超链接的全部都起作用 最后一个就是都不起作用

<TextViewandroid:id="@+id/tv1"android:text="hello, this is http://www.baidu.com, and my email is 974920378@qq.com"android:autoLink="web|email"android:layout_margin="10dp"android:layout_centerHorizontal="true"android:layout_width="wrap_content"android:layout_height="wrap_content" />
复制代码

效果就如下:

原生就是好,直接点击,会默认跳到浏览器,默认的邮件app等等,但是,好像不能改!虽然说方便,但是诸多不便,有人就吐槽过了 TextView autoLink小技巧 - 从源码的角度理解并解决autoLink的所有大坑:

  1. 这超链接网址字体颜色和TextView设置的字体颜色根本不一致啊
  2. 这个自带的下划线好烦人,不想要
  3. 我想点击网址跳转到我自己应用内的WebView打开而不是用手机的浏览器
  4. 和TextView长按事件有冲突,每次onLongClick后都会带出一发超链接网址的onClick,在onLongClick里返回什么都没用。

2)SpannableString 实现可点击超链接效果

参考:TextView SpannableString 使用之实现可点击超链接效果

TextView textView2 = (TextView) findViewById(R.id.tv2);
String clickString = "I Love Android!";
SpannableString spannableString =new SpannableString(clickString);
//设置点击的位置,为 position[2,6),
// 第二个字符开始到第6个字符,前开后闭
spannableString.setSpan(new ClickableSpan() {@Overridepublic void onClick(@NonNull View widget) {Toast.makeText(TextViewActivity.this,"Love",Toast.LENGTH_SHORT).show();}
},2,6,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView2.setText(spannableString);
textView2.setMovementMethod(LinkMovementMethod.getInstance());
复制代码

以上基本实现了,还可以使用 spannable是设置某些字的颜色,大小,下划线等等,参考:使用SpannableString设置部分文字大小、颜色、超链接、点击事件

TextView textView3 = (TextView) findViewById(R.id.tv3);
String content = "This is a test, you can click baidu or youku.";
SpannableString ss = new SpannableString(content);
//设置网络超链接
ss.setSpan(new URLSpan("http://www.baidu.com"),content.indexOf("baidu"), content.indexOf(" or"),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new URLSpan("http://www.youku.com"),content.indexOf("youku"), ss.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置字体颜色
ss.setSpan(new ForegroundColorSpan(Color.parseColor("#ff0000")),content.indexOf("baidu"), content.indexOf(" or"),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new ForegroundColorSpan(Color.parseColor("#ff00ff")),content.indexOf("youku"), ss.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 设置字体大小
ss.setSpan(new AbsoluteSizeSpan(sp2px(this, 25)),content.indexOf("baidu"), content.indexOf(" or"),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new AbsoluteSizeSpan(sp2px(this, 30)),content.indexOf("youku"), ss.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 取消下划线
ss.setSpan(new UnderlineSpan() {@Overridepublic void updateDrawState(@NonNull TextPaint textPaint) {textPaint.setUnderlineText(false);}},content.indexOf("youku"), ss.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView3.setText(ss);
textView3.setMovementMethod(LinkMovementMethod.getInstance());
复制代码

这里设置的网络链接没有传入一个点击事件,所以默认就是跳转到默认浏览器。

3)SpannableStringBuilder 实现多种效果叠加

TextView textView4 = (TextView) findViewById(R.id.tv4);
final String linkWord1 = "Android";
final String linkWord2 = "Are you ok?";
final String linkWord3 = "think you!";
String word = "Hello " + linkWord1 + "," + linkWord2 + " I'm fine," + linkWord3;
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(word);
int index1 = word.indexOf(linkWord1);
int index2 = word.indexOf(linkWord2);
int index3 = word.indexOf(linkWord3);
spannableStringBuilder.setSpan(new ClickableSpan() {@Overridepublic void onClick(@NonNull View widget) {Toast.makeText(TextViewActivity.this, linkWord1, Toast.LENGTH_SHORT).show();}@Overridepublic void updateDrawState(@NonNull TextPaint ds) {super.updateDrawState(ds);ds.setColor(Color.RED);       //设置文件颜色ds.setUnderlineText(true);      //设置下划线}
}, index1, index1 + linkWord1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableStringBuilder.setSpan(new ClickableSpan() {@Overridepublic void onClick(@NonNull View widget) {Toast.makeText(TextViewActivity.this, linkWord2, Toast.LENGTH_SHORT).show();}@Overridepublic void updateDrawState(@NonNull TextPaint ds) {super.updateDrawState(ds);ds.setColor(Color.GREEN);       //设置文件颜色ds.setUnderlineText(false);      //设置下划线}
}, index2, index2 + linkWord2.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableStringBuilder.setSpan(new ClickableSpan() {@Overridepublic void onClick(@NonNull View widget) {Toast.makeText(TextViewActivity.this, linkWord3, Toast.LENGTH_SHORT).show();}@Overridepublic void updateDrawState(@NonNull TextPaint ds) {super.updateDrawState(ds);ds.setColor(Color.BLUE);       //设置文件颜色ds.setUnderlineText(false);      //设置下划线}
}, index3, index3 + linkWord3.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView4.setTextSize(14);
textView4.setText(spannableStringBuilder);
textView4.setMovementMethod(LinkMovementMethod.getInstance());
复制代码

6. 设置字体

1)系统默认字体

<TextView   Android:id="@+id/serif" # sans,monospace #Android:text="Hello,World"Android:typeface="serif"Android:textSize="20sp" />
复制代码

2)自定义字体

在Android中可以引入其他字体,将字体文件保存在 app/src/main/assets/fonts/ 目录下,然后在Java中引入:

//得到TextView控件对象
TextView textView =(TextView)findViewById(R.id.custom);
//将字体文件保存在assets/fonts/目录下,创建Typeface对象
Typeface typeFace =Typeface.createFromAsset(getAssets(),"fonts/HandmadeTypewriter.ttf");
//使用字体
textView.setTypeface(typeFace);
复制代码

或者在XML中设置,字体同样放置一样的目录,

<style name="TextAppearanceLarg" parent="TextAppearance.AppCompat.Large"><!-- Custom Attr--><item name="fontPath">fonts/title.ttf</item>
</style>
复制代码

最后在XML中,TextView中引用:android:textAppearance="@style/TextAppearanceLarg"

7. 设置字体颜色

xml设置单一颜色:

<TextView android:textColor="#fff"/>
<TextView android:textColor="@android:color/white"/>
复制代码

设置点击的时候,颜色变化

<TextViewandroid:textColor="@drawable/item_track_txt_color_selector"android:layout_height="55dp" />//item_track_txt_color_selector 
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" ><item android:state_pressed="true" android:color="#cecbcb"/><item android:color="#FFFFFF"/>
</selector>
复制代码

java中设置颜色:

textView.setTextColor(Color.rgb(255,238,2));
textView.setTextColor(getContext().getColor(R.color.arrow_white));//API23及以上可以用
//或者
textView.setTextColor(getContext().getResources().getColor(R.color.voice_collect_0));
//设置点击的时候,颜色变化 
textView.setTextColor(getContext().getResources().getColorStateList(R.drawable.item_track_txt_color_selector));
复制代码

8. 设置阴影效果

android:shadowColor="#dc1818" # 阴影的颜色
android:shadowDx="10" # 水平方向的偏移量,就是水平方向阴影开始的横坐标位置,像素
android:shadowDy="10" # 垂直方向的偏移量,就是竖直方向阴影开始的纵坐标位置,像素
android:shadowRadius="3.0" # 阴影的半径大小
复制代码

对应的java方法是:

public void setShadowLayer (float radius, float dx, float dy, int color)
复制代码

而且,xml中要设置了颜色后,其他属性才能生效

dx,dy分别为(0,0),(5,5),(20,20):

shadowRadius分别为 1,5,10,越大越模糊:

9. 跑马灯效果

文本过长的时候,要求用滚动播放的形式显示,也就是跑马灯的效果。

XML:android:ellipsize="marquee"android:maxLines="1"android:marqueeRepeatLimit="marquee_forever"
JAVA:TextView textView = (TextView) xHolder.getViewById(R.id.txt_title);textView.setText("dfsd");textView.setSingleLine();textView.setSelected(true);
复制代码

注意:以上必须同时设置!

转载于:https://juejin.im/post/5c8a2c1e6fb9a049d05e9b34

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

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

相关文章

Object 的静态方法之 defineProperties 以及数据劫持效果

再提一下什么是静态方法&#xff1a; 静态方法&#xff1a;在类身上的方法&#xff0c;  动态方法:在实例身上的方法 Object.defineProperties(obj, props)obj&#xff1a;被添加属性的对象props&#xff1a;添加或更新的属性对象给对象定义属性&#xff0c;如果存在该属性&a…

Spring实现AOP的4种方式

Spring实现AOP的4种方式 先了解AOP的相关术语: 1.通知(Advice): 通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。 2.连接点(Joinpoint): 程序能够应用通知的一个“时机”&#xff0c;这些“时机”就是连接点&#xff0c;例如方法被调用时、…

如何使用Plotly在Python中为任何DataFrame绘制地图的卫星视图

Chart-Studio和Mapbox简介 (Introduction to Chart-Studio and Mapbox) Folium and Geemap are arguably the best GIS libraries/tools to plot satellite-view maps or any other kinds out there, but at times they require an additional authorization to use the Google…

Java入门系列-26-JDBC

认识 JDBC JDBC (Java DataBase Connectivity) 是 Java 数据库连接技术的简称&#xff0c;用于连接常用数据库。 Sun 公司提供了 JDBC API &#xff0c;供程序员调用接口和类&#xff0c;集成在 java.sql 和 javax.sql 包中。 Sun 公司还提供了 DriverManager 类用来管理各种不…

3.19PMP试题每日一题

在房屋建造过程中&#xff0c;应该先完成卫生管道工程&#xff0c;才能进行电气工程施工&#xff0c;这是一个&#xff1a;A、强制性依赖关系B、选择性依赖关系C、外部依赖关系D、内部依赖关系 作者&#xff1a;Tracy19890201&#xff08;同微信号&#xff09;转载于:https://…

Can't find temporary directory:internal error

今天我机子上的SVN突然没有办法进行代码提交了&#xff0c;出现的错误提示信息为&#xff1a; Error&#xff1a;Cant find temporary directory:internal error 然后试了下其他的SVN源&#xff0c;发现均无法提交&#xff0c;并且update时也出现上面的错误信息。对比项目文件…

snowflake 数据库_Snowflake数据分析教程

snowflake 数据库目录 (Table of Contents) Introduction 介绍 Creating a Snowflake Datasource 创建雪花数据源 Querying Your Datasource 查询数据源 Analyzing Your Data and Adding Visualizations 分析数据并添加可视化 Using Drilldowns on Your Visualizations 在可视化…

jeesite缓存问题

jeesite&#xff0c;其框架主要为&#xff1a; 后端 核心框架&#xff1a;Spring Framework 4.0 安全框架&#xff1a;Apache Shiro 1.2 视图框架&#xff1a;Spring MVC 4.0 服务端验证&#xff1a;Hibernate Validator 5.1 布局框架&#xff1a;SiteMesh 2.4 工作流引擎…

高级Python:定义类时要应用的9种最佳做法

重点 (Top highlight)At its core, Python is an object-oriented programming (OOP) language. Being an OOP language, Python handles data and functionalities by supporting various features centered around objects. For instance, data structures are all objects, …

Java 注解 拦截器

场景描述&#xff1a;现在需要对部分Controller或者Controller里面的服务方法进行权限拦截。如果存在我们自定义的注解&#xff0c;通过自定义注解提取所需的权限值&#xff0c;然后对比session中的权限判断当前用户是否具有对该控制器或控制器方法的访问权限。如果没有相关权限…

医疗大数据处理流程_我们需要数据来大规模改善医疗流程

医疗大数据处理流程Note: the fictitious examples and diagrams are for illustrative purposes ONLY. They are mainly simplifications of real phenomena. Please consult with your physician if you have any questions.注意&#xff1a;虚拟示例和图表仅用于说明目的。 …

What's the difference between markForCheck() and detectChanges()

https://stackoverflow.com/questions/41364386/whats-the-difference-between-markforcheck-and-detectchanges转载于:https://www.cnblogs.com/chen8840/p/10573295.html

ASP.NET Core中使用GraphQL - 第七章 Mutation

ASP.NET Core中使用GraphQL - 目录 ASP.NET Core中使用GraphQL - 第一章 Hello WorldASP.NET Core中使用GraphQL - 第二章 中间件ASP.NET Core中使用GraphQL - 第三章 依赖注入ASP.NET Core中使用GraphQL - 第四章 GrahpiQLASP.NET Core中使用GraphQL - 第五章 字段, 参数, 变量…

POM.xml红叉解决方法

方法/步骤 1用Eclipse创建一个maven工程&#xff0c;网上有很多资料&#xff0c;这里不再啰嗦。 2右键maven工程&#xff0c;进行更新 3在弹出的对话框中勾选强制更新&#xff0c;如图所示 4稍等片刻&#xff0c;pom.xml的红叉消失了。。。

JS前台页面验证文本框非空

效果图&#xff1a; 代码&#xff1a; 源代码&#xff1a; <script type"text/javascript"> function check(){ var xm document.getElementById("xm").value; if(xm null || xm ){ alert("用户名不能为空"); return false; } return …

python对象引用计数器_在Python中借助计数器对象对项目进行计数

python对象引用计数器前提 (The Premise) When we deal with data containers, such as tuples and lists, in Python we often need to count particular elements. One common way to do this is to use the count() function — you specify the element you want to count …

套接字设置为(非)阻塞模式

当socket 进行TCP 连接的时候&#xff08;也就是调用connect 时&#xff09;&#xff0c;一旦网络不通&#xff0c;或者是ip 地址无效&#xff0c;就可能使整个线程阻塞。一般为30 秒&#xff08;我测的是20 秒&#xff09;。如果设置为非阻塞模式&#xff0c;能很好的解决这个…

经典问题之「分支预测」

问题 来源 &#xff1a;stackoverflow 为什么下面代码排序后累加比不排序快&#xff1f; public static void main(String[] args) {// Generate dataint arraySize 32768;int data[] new int[arraySize];Random rnd new Random(0);for (int c 0; c < arraySize; c)data…

vi

vi filename :打开或新建文件&#xff0c;并将光标置于第一行首 vi n filename &#xff1a;打开文件&#xff0c;并将光标置于第n行首 vi filename &#xff1a;打开文件&#xff0c;并将光标置于最后一行首 vi /pattern filename&#xff1a;打开文件&#xff0c;并将光标置…

数字图像处理 python_5使用Python处理数字的高级操作

数字图像处理 pythonNumbers are everywhere in our daily life — there are phone numbers, dates of birth, ages, and other various identifiers (driver’s license and social security numbers, for example).电话号码在我们的日常生活中无处不在-电话号码&#xff0c;…