1. 程式人生 > >TextView 開發中長使用的幾種屬性 —— 開發記錄

TextView 開發中長使用的幾種屬性 —— 開發記錄

樹欲靜,而風不止

PS:這兩天一直在更改公司專案程式碼,入職半個月以來,分配了第一個開發任務,重構 個人主頁。開始瀏覽了下原型圖,很簡單,只是UI風格變換了,但是不能只是改改UI,畢竟專案以後還是要自己維護的。

所以 打算 在 個人資訊介面 使用MVP架構,慢慢蠶食整個專案,達到專案重構的目的。

預定工期:2天 

上週五一天把介面搭建出來,儘量拆分,複用,然後構建邏輯層,整個框子搭建完成,

今天打算把原有介面資料,邏輯,堆到P 層,發現自己想象太簡單了。一個我的介面,點選事件30+,介面五六個,各個都是根據返回資料判斷,進入介面。最終只能做到 介面放在P 層,返回資料處理,實在是看不懂。全部使用JSONObject 一層一層解析。最重要是 沒有介面文件,沒有需求文件,導致我在邏輯這塊一行程式碼都不敢更改。幸好(管理層已經拍板,後臺整體重構)


TextView 使我們使用最多的控制元件。但是一些屬性再用到的時候還是需要百度,導致開發效率極低。所以這裡記錄下,方便下次使用。

  1. TextView 控制元件中使用圖片詳解

  2. 限制文字顯示長度

  3. 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("個人簡介 :"));

引用 自導自演的機器人 博文

 


長城不是一天建成的,羅馬不是一天到達。