【问题标题】:How to access values from strings.xml如何从 strings.xml 访问值
【发布时间】:2017-07-02 13:49:22
【问题描述】:

如何在 kotlin android 中访问 strings.xml 中的值?

class MainActivity : AppCompatActivity(), View.OnClickListener {
    override fun onClick(p0: View?) {
        getToastCalled("")
        TODO("not implemented")
    }

    private fun getToastCalled(message: String) {
        TODO("not implemented")
    }

    var btn: Button? = null;

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var tv_name=findViewById(R.id.tv) as TextView
        btn=findViewById(R.id.button) as Button
        tv_name.setText(KtTest().name);
        (btn as Button).setOnClickListener(MainActivity@this)
    }
}

【问题讨论】:

  • 就像在 Java 中一样。
  • 您已经在示例中引用了布局和 ID。另请记住,您可以使用 ctrl + shift + alt + k 将 java 文件转换为 kotlin。 kotl.in 上还有大量关于可用方法的文档
  • 非常感谢您的帮助..

标签: android kotlin


【解决方案1】:

在 Kotlin 中访问字符串值的工作方式与在 Java 中完全相同,只是使用 Kotlin 语法:

val string: String = getString(R.string.your_string_id)

(假设您的代码位于 Android Activity 或继承自 Context 的类似类中。如果没有,您需要从某处获取 Context 实例,并将其更改为 myContext.getString(...) .)

【讨论】:

  • 这可能会产生 null
  • @IgorGanapolsky 嗯,是的,从技术上讲它可以,但这是一个编程错误或构建过程有问题。这个返回 null 的调用无法以任何有意义的方式恢复,因此在 Java 中,这里永远不会检查 null,幸运的是,在 Kotlin 中也不需要。
  • 我试过用这个功能,Android Studio都找不到
  • @RowanBerry getStringContext 上定义。我的示例代码是假设您在 Android Activity 中编写的,它继承自 Context,但如果您在其他地方需要它,则需要在某处提供 Context。在这种情况下,您需要将示例更改为 myContext.getString(...)。 (免责声明——好久没做Android开发了,细节可能有所变化)
  • @Robin 是的,我在写完评论后发现,试图在一个对象类中做到这一点,只是没有明确说明
【解决方案2】:

如果你在 oncreate 之外访问它,那么

    Resources.getSystem().getString(R.string.btn_yes)  

【讨论】:

    【解决方案3】:

    如果需要访问整个数组:

    val data= resources.getStringArray(R.array.array_id)
    

    【讨论】:

      【解决方案4】:

      如果有帮助,我就是这样做的 - 您需要应用程序上下文并导入 R 类

      applicationContext.getString(R.string.text_string)
      import com.example.yourpackagename.R
      

      【讨论】:

        【解决方案5】:

        要在我的代码中使用 strings.xml,我执行以下操作:
        textView.text = "${getString(R.string.my_text)}"

        【讨论】:

          【解决方案6】:

          使用格式 - R.string.string_name

          例如明确引用它:

          R.string.loadingText,
          

          鉴于您的 XML 文件具有以下作为资源的一部分:

          <string name="loadingText">The actual text to be displayed</string>
          

          【讨论】:

          • 这不是返回那个 XML 字符串的整数 id,而不是字符串内容本身吗?
          【解决方案7】:

          我将它用于标题栏,但我的应用程序崩溃了。

          private var title: String = getString(R.string.profile)
          

          【讨论】:

            【解决方案8】:

            您可以通过 - "@string/variable_name" 访问字符串值。

            例如 - 如果 strings.xml 包含像 &lt;string name="app_name"&gt;Tip Time&lt;/string&gt; 这样的条目,那么您可以使用 -

            "@string/app_name"
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-11-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-05-31
              • 2017-12-08
              • 1970-01-01
              • 2013-10-24
              相关资源
              最近更新 更多