如何解决在 Android 中使用多语言项目时,如何通过文本区分 Spinner 的选定项目?
我试图通过(多语言)文本区分 Spinner 的选定项目。
这是我的默认 strings.xml 内容:
<string-array name="spinner_items">
<item>length</item>
<item>weight</item>
<item>temperature</item>
</string-array>
这是另一个strings.xml(意大利语)内容:
<string-array name="spinner_items">
<item>lunghezza</item>
<item>peso</item>
<item>temperatura</item>
</string-array>
我以这种方式设置我的 Spinner 项目:
val items = resources.getStringArray(R.array.spinner_items)
spinner.adapter = ArrayAdapter(requireContext(),android.R.layout.simple_spinner_item,items)
然后我添加 item selected 侦听器:
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>,view: View,position: Int,id: Long) {
when(spinner.getItemAtPosition(position).toString()) {
"length" -> actionLength()
"lunghezza" -> actionLength()
"weight" -> actionWeight()
"peso" -> actionWeight()
"temperature" -> actionTemperature()
"temperatura" -> actionTemperature()
}
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}
一切正常,但问题是每次我添加一个新的语言环境时,我必须记住在 when 块中添加特定的字符串翻译。 有没有更“动态”的方式来做到这一点?
解决方法
我过去遇到过同样的问题,以下是我解决它的方法。 通过为数组中的每个项目添加字符串资源名称来编辑 strings.xml 文件,例如:
默认strings.xml
<string name="length">length</string>
<string name="weight">weight</string>
<string name="temperature">temperature</string>
<string-array name="spinner_items">
<item>@string/length</item>
<item>@string/weight</item>
<item>@string/temperature</item>
</string-array>
意大利语strings.xml
<string name="length">lunghezza</string>
<string name="weight">peso</string>
<string name="temperature">temperatura</string>
<string-array name="spinner_items">
<item>@string/length</item>
<item>@string/weight</item>
<item>@string/temperature</item>
</string-array>
因此在您的代码中,您将拥有:
when(spinner.getItemAtPosition(position).toString()) {
getString(R.string.length) -> actionLength()
getString(R.string.weight) -> actionWeight()
getString(R.string.temperature) -> actionTemperature()
}
希望对你有帮助!
,只需使用 position
:
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>,view: View,position: Int,id: Long) {
when(position) {
0 -> actionLength()
1 -> actionWeight()
2 -> actionTemperature()
}
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}
在你的数组中使用:
<string-array name="spinner_items">
<item>@string/length</item>
<item>@string/weight</item>
<item>@string/temperature</item>
</string-array>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。