方法一:Color 類預定義常量
textView.setTextColor(Color.RED);
textView.setTextColor(Color.BLUE);
textView.setTextColor(Color.GREEN);
textView.setTextColor(Color.BLACK);
textView.setTextColor(Color.WHITE);
textView.setTextColor(Color.TRANSPARENT);
textView.setTextColor(Color.parseColor("#FF0000")); // 解析十六進制字串
方法二:RGB / ARGB 組合
// RGB (0-255)
textView.setTextColor(Color.rgb(255, 0, 0)); // 紅
textView.setTextColor(Color.rgb(0, 128, 255)); // 藍
// ARGB (含透明度 0-255)
textView.setTextColor(Color.argb(128, 255, 0, 0)); // 半透明紅
方法三:資源引用 (推薦,支援主題/夜間模式)
// colors.xml
<color name="primary_text">#212121</color>
<color name="accent_color">#FF5722</color>
// 代碼 (需 Context)
textView.setTextColor(ContextCompat.getColor(context, R.color.primary_text));
// 或 API 23+
textView.setTextColor(getColor(R.color.primary_text));
方法四:XML 布局中靜態設置
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"
android:textColor="@color/primary_text" />
<!-- 或直接十六進制 -->
<TextView
android:textColor="#FF5722" />
方法五:狀態列表顏色 (Selector) - 按狀態變色
<!-- res/color/text_selector.xml -->
<selector xmlns:android="https://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/colorPressed" />
<item android:state_focused="true" android:color="@color/colorFocused" />
<item android:state_selected="true" android:color="@color/colorSelected" />
<item android:color="@color/colorDefault" /> <!-- 默認 -->
</selector>
<TextView
android:textColor="@color/text_selector" />
常見錯誤與避坑
| 錯誤代碼 | 問題 | 修正 |
textView.setTextColor(#FF0000) | 語法錯誤:# 開頭被當作註釋/運算符 | Color.parseColor("#FF0000") 或 0xFFFF0000 |
textView.setTextColor(R.color.red) | 傳入資源 ID (int) 而非顏色值 | ContextCompat.getColor(ctx, R.color.red) |
直接用 0xFF0000 | 缺少 Alpha 通道,實際為透明藍 | 0xFFFF0000 (ARGB: Alpha=FF) |
最佳實踐總結
- 優先使用色彩資源:
@color/xxx + ContextCompat.getColor(),支援主題切換、夜間模式
- 動態計算顏色:使用
Color.argb()、Color.rgb(),避免手拼十六進制
- 狀態相關顏色:使用 Color State List (
res/color/xxx.xml)
- 避免硬編碼:所有顏色值集中管理於
colors.xml