【问题标题】:Warning when declare a string in android在android中声明字符串时发出警告
【发布时间】:2019-08-17 17:11:13
【问题描述】:

我只是向各位专家提出一个简单的问题,因为我刚开始学习 android 基础知识。

我尝试创建一个表格视图并在其中显示一些字符串。

我这样写 xml,但我收到一些警告“I18N] 硬编码字符串“Open...”,应该使用@string 资源” 当一个字符串被声明时。

<TableRow>
    <TextView
        android:layout_column="1"
        android:text="hello"
        android:padding="3dip" />
    <TextView
        android:text="helloo"
        android:gravity="right"
        android:padding="3dip" />
</TableRow>

<TableRow>
    <TextView
        android:layout_column="1"
        android:text="how"
        android:padding="3dip" />
    <TextView
        android:text="Ctrl-Shift-S"
        android:gravity="right"
        android:padding="3dip" />
</TableRow>

<View
    android:layout_height="2dip"
    android:background="#FF909090" />

<TableRow>
    <TextView
        android:text="are"
        android:padding="3dip" />
    <TextView
        android:text="you"
        android:padding="3dip" />
</TableRow>

请您帮帮我。在此先感谢您。

【问题讨论】:

    标签: android


    【解决方案1】:

    字符串应该转到res/values/strings.xml 文件,该文件可能如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World!</string>
        <string name="app_name">My App</string>
        <string name="ctrl-shift-s">Ctrl-Shift-S</string>
    </resources>
    

    应用程序可以轻松本地化:在 Eclipse 中,右键单击 res 文件夹,选择 Android XML Values File,单击下一步。输入strings.xml,点击下一步。现在您可以添加各种选项,例如语言或网络代码。

    现在您可以使用@string/ctrl-shift-s 引用您的字符串。

    <TableRow>
        <TextView
            android:layout_column="1"
            android:text="how"
            android:padding="3dip" />
        <TextView
            android:id="@+id/textview-command"
            android:text="@string/ctrl-shift-s"
            android:gravity="right"
            android:padding="3dip" />
    </TableRow>
    

    或者,在 Java 代码中,R.string.ctrl-shift-s

    @+id/xyz 创建一个 ID,以便您可以从代码中获取视图。

    所有资源都被自动添加到R 类中。

    TextView textView = (TextView) findViewById(R.id.textview-command);
    if (textView != null)
        textView.setText(R.string.ctrl-shift-s);
    

    【讨论】:

    • 当我提供资源时,它显示警告属性缺少 Android 命名空间前缀。
    • 我猜你的布局文件缺少根元素的xmlns:android="http://schemas.android.com/apk/res/android" 属性。
    • 现在我给我的 xml 像
    • 并在 string.xml Hello World, TableviewActivity!Tableview
    • 一条评论足以让我注意到。如果应用程序编译但崩溃了,你很可能做错了什么,它无法在你的 xml 文件中编译错误。
    【解决方案2】:

    'I18N' 是国际化的简写;例如,并非世界上的每个人都会说或读英语。关于“应该使用@string 资源”的警告只是提醒您应该将特定于语言环境的信息放在“资源包”(例如/res/values/strings.xml)中,以便可以以不同的语言提供标签和其他文本无需为每种语言重新编码和重新编译整个应用程序。

    如果您只是在测试,可以放心地忽略该警告,但最好养成在外部文件中将字符串作为资源引用的习惯,而不是直接在应用程序本身中硬编码它们。

    【讨论】:

      【解决方案3】:

      是在@String 资源中声明静态字符串值,并从布局 xml 文件中提供其引用。

      <resources>
          <string name="hello">Hello World, HomeActivity!</string>
      </resources>
      

      【讨论】:

        【解决方案4】:

        只需在资源值文件夹中创建一个名为 strings 的新 .xml 文件。 在该 strings.xml 文件中写入所有字符串,然后从此文件中分配字符串。 @strings/任意字符串

        <?xml version="1.0" encoding="utf-8"?>
        <resources>
            <string name="Your-String1">yourstring1</string>
            <string name="Your-String2">yourstring2</string>
        </resources
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-08-12
          • 1970-01-01
          • 1970-01-01
          • 2010-12-31
          • 2011-02-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多