在 Android 中使用 TextView.setText() 時,若傳入字串資源 ID(如 R.string.sport)卻顯示數字而非字串內容,是因為調用了錯誤的重載方法。
// 錯誤:傳入字串 "@string/sport" 而非資源 ID
display.setText("@string/sport");
// 或錯誤:直接傳入資源 ID 整數
// display.setText(R.string.sport); // 這行其實是正確的,但若顯示數字說明調用了錯誤重載
TextView.setText() 有兩個主要重載:
| 方法簽名 | 行為 | 示例 |
|---|---|---|
setText(CharSequence text) | 直接顯示字串內容 | setText("Hello")、setText(getString(R.string.sport)) |
setText(@StringRes int resid) | 根據資源 ID 查找並顯示字串 | setText(R.string.sport) |
setText("@string/sport") → 顯示字面文字 "@string/sport"setText(String.valueOf(R.string.sport)) → 顯示數字 ID(如 "2131623984")int 資源 ID 賦值給 String 變量再傳入display.setText(R.string.sport); // 正確:調用 setText(int)
String sportStr = getString(R.string.sport); // 或 getResources().getString(R.string.sport)
display.setText(sportStr); // 調用 setText(CharSequence)
// strings.xml: 歡迎 %1$s,您是第 %2$d 位訪客
display.setText(getString(R.string.welcome, "張三", 100));
<TextView
android:id="@+id/display"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sport" />
R.java)setText(int) 在運行時通過 Resources.getString(int) 查找字串// 檢查資源 ID 是否有效
int resId = R.string.sport;
String debugInfo = "Res ID: " + resId + ", String: " + getString(resId);
Log.d("DEBUG", debugInfo);