View系列之 【TextView】

View系列之 TextView

關鍵詞

SpannableStringClickableSpanLinkMovementMethodsetHighlightColor

1. TextView部分文字添加點擊事件
實現代碼

		SpannableString nameSpannable = new SpannableString("張三:");
        SpannableString contentSpannable = new SpannableString("你說的對");

        RecordClickSpan nameSpan = new RecordClickSpan() {
            @Override
            public void onClick(View widget) {
                Log.i(TAG, "點擊暱稱");
            }
        };

        RecordClickSpan contentSpan = new RecordClickSpan() {
            @Override
            public void onClick(View widget) {
                Log.i(TAG, "點擊內容");
            }
        };
        nameSpannable.setSpan(nameSpan, 0, "張三:".length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        contentSpannable.setSpan(contentSpan, 0, "你說的對".length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

        colorTxt.append(nameSpannable);
        colorTxt.append(contentSpannable);
        colorTxt.setMovementMethod(LinkMovementMethod.getInstance());
        colorTxt.setHighlightColor(getResources().getColor(android.R.color.transparent));

2. 設置TextView的選中或未選中字體顏色

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#3ebfe9" android:state_pressed="true" />
    <item android:color="#3ebfe9" android:state_selected="true" />
    <item android:color="@color/text_color" /> <!-- not selected -->
</selector>
 

3. TextView 的MaxLength 和 MaxEms

	<!--android:maxLength="18" 限制輸入18個數字或字母或漢字或表情(注意一個表情佔2個長度)-->
    <!--android:maxLength="18" 限制最大輸入字符個數-->
    <!--android:maxEms="6" 實際意義的最大寬度,這個em指的是字寬 -->
    <EditText
        android:id="@+id/input_txt"
        android:layout_width="wrap_content"
        android:textColor="@color/black"
        android:layout_height="100dp"
        android:minWidth="30dp"
        android:maxLength="18"
        android:maxEms="6"
        android:layout_marginTop="20dp" />

	// 也可用代碼限制
	EditText input = findViewById(R.id.input_txt);
	input.setFilters(new InputFilter[]
		{
			new InputFilter.LengthFilter(18)
		}
	);
	// 如果需要動態切換EditText加長度限制或解除長度限制
	msgEdit.setFilters(new InputFilter[]{});

4. 影響TextView點擊的一個小知識點

// 當你對TextView增加了 android:textIsSelectable="true" 屬性
// 你會發現TextView每次重新繪製後,都需要點擊第二次才響應點擊事件

<TextView
        android:id="@+id/test_tv"
        android:layout_width="@dimen/_60dp"
        android:layout_height="24dp"
        android:textColor="@color/ch7"
        android:textIsSelectable="true"
        android:textSize="@dimen/_14dp" />

5. 設置setTextColor字體顏色小結

        // 1. 需要帶透明度
        //    0xFF0000FF 是int類型的數據,分組一下0x| FF | 0000FF
        //    0x是代表顏色整數的標記,ff是表示透明度,0000FF表示顏色
        //    注意:這裏 0xFF0000FF 必須是8個的顏色表示,不接受0000FF這種6個的顏色表示
//        color_tv.setTextColor(0xFF0000FF);

        // 2.1 直接Color.
        color_tv.setTextColor(Color.RED);
        // 2.2
//        color_tv.setTextColor(Color.rgb(255, 255, 0));
        // 2.3
//        color_tv.setTextColor(Color.parseColor("#44FF00FF"));

        // 3. 通過獲得資源文件進行設置
        color_tv.setTextColor(getResources().getColor(R.color.ch3));

5. 實現分段顯示不同顏色的字符串

一般有三種實現方式

  • 直接根據不同的需要分段字符串,然後分別使用多個TextView來顯示
  • 使用spannablestring
  • 使用Html
參考
  1. AndroidRichText幫助實現像QQ,微信一樣的
  2. Android 實現clickspan顯示及點擊效果
  3. LayoutDirection問題
  4. Android 中東阿拉伯語適配,看這一篇夠了
  5. Android中TextView實現分段顯示不同顏色的字符串
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章