【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.pswp.cn/news/388031.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388031.shtml
英文地址,請注明出處:http://en.pswp.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;…