1. ホーム
  2. android

[解決済み】Android TextView : "setTextで表示されたテキストを連結しない" について

2022-01-19 04:36:53

質問

を使ってテキストを設定しています。 setText() を以下の方法で実行します。

prodNameView.setText("" + name);

prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));

その中で 最初に はシンプルな使い方で 第二 は、テキストに書式を設定するものです。

Android Studioはとても面白いので、メニュー Analyze -> Code Cleanup で、上の2行のように提案されました。

setTextで表示したテキストを連結しないでください。リソース文字列 プレースホルダーを使用する。(Ctrl+F1)

を呼び出す場合 TextView#setTextです。

  • Number#toString() を数値の書式設定に使用しないでください。考慮すべきこと String#formatを使用して、適切な書式指定(%dまたは%f)をしてください。 代わりに
  • テキスト表示に文字列リテラル(例:"Hello")を渡さないでください。ハードコードされたテキストは、他の言語に適切に翻訳されません。 代わりにAndroidのリソース文字列を使用することを検討してください。
  • テキストチャンクを連結してメッセージを作成しないでください。そのようなメッセージは適切に翻訳されません。

これはどうしたらいいのでしょうか?どなたか、この物が何なのか、どうすればいいのか、説明してください。

解決方法は?

リソースはgetStringのオーバーロードバージョンで varargs タイプの Object : getString(int, java.lang.Object...)です。 . strings.xmlで文字列を正しく設定し、正しいプレースホルダーを使用すれば、このバージョンを使って最終的な文字列のフォーマットされたバージョンを取得することができます。例えば、以下のようになります。

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

を使って getString(R.string.welcome_message, "Test", 0);

を持つ文字列を返します。

 "Hello Test! you have 0 new messages"

について setText("" + name);

最初の例 prodNameView.setText("" + name); は、私には何の意味もありません。TextViewはNULL値を扱うことができます。nameがNULLの場合、テキストは描画されません。