kotlinでは、以下のように文字列を結合することができるのですが、AndroidStudioや、InteliJ IDEAでこのような形で実装しようとすると「できればsetTextのテキストは連結してほしくないんよなぁ。。。」というワーニングが発生する。
val name = "遠藤"
textView.text = "私の名前は${name}"
textView.text = "私の名前は" + name
以下ワーニング
Do not concatenate text displayed with `setText`. Use resource string with placeholders.
こういう場合はstrings.xmlを使えば解消できます。
strings.xml
<resources>
<string name="app_name">My Application</string>
<string name="name">私の名前は、%1$sです。</string>
</resources>
MainActivity.kt
package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val textView: TextView = findViewById(R.id.textView)
// getStringでstrings.xmlで定義した値を取得
val name = getString(R.string.name, "遠藤")
textView.text = name
}
}
こうすることでstringsファイルで定義した「%1$s」の部分がgetStringの第2引数の値になり、ワーニングも消えます。
基本的にはハードコードが非推奨なので、とりあえず文字列はstrings.xmlに定義しておいて使うでよさそう。
参考:https://developer.android.com/guide/topics/resources/string-resource