首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android TextView 設置字串資源 ID 卻顯示數字的原因與解決

     編輯:程式設計綜合問答

在 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)

常見錯誤場景

  1. 字串字面量:setText("@string/sport") → 顯示字面文字 "@string/sport"
  2. 資源 ID 作為字串:setText(String.valueOf(R.string.sport)) → 顯示數字 ID(如 "2131623984")
  3. 變量類型混淆:將 int 資源 ID 賦值給 String 變量再傳入

正確用法

方法一:直接傳入資源 ID(推薦)

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));

XML 佈局中直接引用(最佳實踐)

<TextView
    android:id="@+id/display"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/sport" />

編譯時機制說明

  • 字串資源在編譯時被分配唯一整數 ID(存儲在 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);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved