TextView 開發中長使用的幾種屬性 —— 開發記錄
樹欲靜,而風不止
PS:這兩天一直在更改公司專案程式碼,入職半個月以來,分配了第一個開發任務,重構 個人主頁。開始瀏覽了下原型圖,很簡單,只是UI風格變換了,但是不能只是改改UI,畢竟專案以後還是要自己維護的。
所以 打算 在 個人資訊介面 使用MVP架構,慢慢蠶食整個專案,達到專案重構的目的。
預定工期:2天
上週五一天把介面搭建出來,儘量拆分,複用,然後構建邏輯層,整個框子搭建完成,
今天打算把原有介面資料,邏輯,堆到P 層,發現自己想象太簡單了。一個我的介面,點選事件30+,介面五六個,各個都是根據返回資料判斷,進入介面。最終只能做到 介面放在P 層,返回資料處理,實在是看不懂。全部使用JSONObject 一層一層解析。最重要是 沒有介面文件,沒有需求文件,導致我在邏輯這塊一行程式碼都不敢更改。幸好(管理層已經拍板,後臺整體重構)
TextView 使我們使用最多的控制元件。但是一些屬性再用到的時候還是需要百度,導致開發效率極低。所以這裡記錄下,方便下次使用。
-
TextView 控制元件中使用圖片詳解
-
限制文字顯示長度
-
TextView排版問題
a、TextView 中新增圖示 屬性:
- android:drawableBottom
- android:drawableRight
- android:drawableTop
- android:drawableLeft
- android:drawablePadding 設定文字與圖片的間隔
b、使用drawableBottom設定過圖片之後,發現UI提供的圖片偏大,如何控制圖片大小
建立一個檔案left_img.xml,檔案內容如下:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/qa" android:width="18dp" android:height="18dp" /> </layer-list >
然後在佈局中引用:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="18dp"
android:paddingBottom="18dp"
android:paddingLeft="12dp"
android:drawablePadding="12dp"
android:gravity="center|left"
android:drawableLeft="@drawable/left_img" />
2、控制TextView顯示;
(注意:layout_width="wrap_content",寬度必須是wrap_content,為match_parent無效)
android:maxEms="10" //限制位元組長度為10
android:ellipsize="end" //省略號在最後面
android:singleLine="true" //超過長度10為省略號
android:lines=“2”//顯示行數 android
android:textStyle=“bold”文字加
//設定不為加粗
textView .setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
//設定為正常
textView.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
//設定字形[bold(粗體) 0, italic(斜體) 1, bolditalic(又粗又斜) 2] 可以設定一個或多個,用“|”隔開
3、字型兩端對齊的問題
工具類:
public class AlignedTextUtils {
private static int n = 0;// 原Str擁有的字元個數
private static SpannableString spannableString;
private static double multiple = 0;// 放大倍數
/**
* 對顯示的字串進行格式化 比如輸入:出生年月 輸出結果:出正生正年正月
*/
public static String formatStr(String str) {
if (TextUtils.isEmpty(str)) {
return "";
}
n = str.length();
if (n >= 6) {
return str;
}
StringBuilder sb = new StringBuilder(str);
for (int i = n - 1; i > 0; i--) {
sb.insert(i, "正");
}
return sb.toString();
}
/**
* 對顯示字串進行格式化 比如輸入:安正卓正機正器正人 輸出結果:安 卓 機 器 人 * * @param str * @return
*/
public static SpannableString formatText(String str) {
if (TextUtils.isEmpty(str)) {
return null;
}
str = formatStr(str);
if (str.length() <= 6) {
return null;
}
spannableString = new SpannableString(str);
switch (n) {
case 2:
multiple = 4;
break;
case 3:
multiple = 1.5;
break;
case 4:
multiple = 0.66666666666666666666666666666666667;
break;
case 5:
multiple = 0.25;
break;
default:
break;
}
for (int i = 1; i < str.length(); i = i + 2) {
spannableString.setSpan(new RelativeSizeSpan((float) multiple), i, i + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), i, i + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
return spannableString;
}
}
使用
tv_code.setText(AlignedTextUtils.formatStr("驗 證 碼:"));
textView_sex.setText(AlignedTextUtils.formatStr("性 別:"));
textView_selectcity.setText(AlignedTextUtils.formatStr("所在城市 :"));
textView_individualresume.setText(AlignedTextUtils.formatStr("個人簡介 :"));
長城不是一天建成的,羅馬不是一天到達。