【參考】html
必需要同時設置XML和JAVA,並且,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("");
複製代碼
【參考】android
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);
複製代碼
Java代碼中設置Drawable,並且能夠設置大小,經過drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight())
:web
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之間的間距
複製代碼
xml中直接寫單位便可:瀏覽器
使用android:textSize屬性設置,例如
android:textSize="15sp"
複製代碼
代碼中:bash
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去聲明。網絡
原生有一個字段,autoLink,app
autoLink 一共有六個值 :web phone map email all none 分別是url連接 電話號碼提取撥號 地圖地址 電子郵件 all是可以支持超連接的所有都起做用 最後一個就是都不起做用ide
<TextView
android: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的全部大坑:
- 這超連接網址字體顏色和TextView設置的字體顏色根本不一致啊
- 這個自帶的下劃線好煩人,不想要
- 我想點擊網址跳轉到我本身應用內的WebView打開而不是用手機的瀏覽器
- 和TextView長按事件有衝突,每次onLongClick後都會帶出一發超連接網址的onClick,在onLongClick裏返回什麼都沒用。
參考: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() {
@Override
public 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() {
@Override
public void updateDrawState(@NonNull TextPaint textPaint) {
textPaint.setUnderlineText(false);
}
},
content.indexOf("youku"), ss.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView3.setText(ss);
textView3.setMovementMethod(LinkMovementMethod.getInstance());
複製代碼
這裏設置的網絡連接沒有傳入一個點擊事件,因此默認就是跳轉到默認瀏覽器。
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() {
@Override
public void onClick(@NonNull View widget) {
Toast.makeText(TextViewActivity.this, linkWord1, Toast.LENGTH_SHORT).show();
}
@Override
public 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() {
@Override
public void onClick(@NonNull View widget) {
Toast.makeText(TextViewActivity.this, linkWord2, Toast.LENGTH_SHORT).show();
}
@Override
public 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() {
@Override
public void onClick(@NonNull View widget) {
Toast.makeText(TextViewActivity.this, linkWord3, Toast.LENGTH_SHORT).show();
}
@Override
public 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());
複製代碼
<TextView
Android:id="@+id/serif" # sans,monospace #
Android:text="Hello,World"
Android:typeface="serif"
Android:textSize="20sp" />
複製代碼
在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"
xml設置單一顏色:
<TextView android:textColor="#fff"/>
<TextView android:textColor="@android:color/white"/>
複製代碼
設置點擊的時候,顏色變化
<TextView
android: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));
複製代碼
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,越大越模糊:
文本過長的時候,要求用滾動播放的形式顯示,也就是跑馬燈的效果。
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);
複製代碼
注意:以上必須同時設置!