android 硬编码字符串“第三行”,应使用@string资源

ozxc1zmp  于 2023-02-27  发布在  Android
关注(0)|答案(6)|浏览(199)

我是一个初学者android开发人员,我尝试在eclipse中运行这个线性布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

  <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1">
      <TextView
          android:text="red"
          android:gravity="center_horizontal"
          android:background="#aa0000"
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_weight="1"/>
      <TextView
          android:text="green"
          android:gravity="center_horizontal"
          android:background="#00aa00"
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_weight="1"/>
      <TextView
          android:text="blue"
          android:gravity="center_horizontal"
          android:background="#0000aa"
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_weight="1"/>
      <TextView
          android:text="yellow"
          android:gravity="center_horizontal"
          android:background="#aaaa00"
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_weight="1"/>
  </LinearLayout>

  <LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1">
    <TextView
        android:text="row one"
        android:textSize="15pt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
    <TextView
        android:text="row two"
        android:textSize="15pt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
    <TextView
        android:text="row three"
        android:textSize="15pt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
    <TextView
        android:text="row four"
        android:textSize="15pt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
  </LinearLayout>

</LinearLayout>

我注意到:
1)**android:text="Yellow"下方的黄线
2)
android:text="row four"**下方的黄线
三角警告说[I18N] Hardcoded string "Yellow", should use @string resource ",其余的警告也一样。有什么建议吗?

vcudknz3

vcudknz31#

将字符串硬编码到布局文件中并不是一种好的做法。您应该将它们添加到字符串资源文件中,然后从布局中引用它们。
这允许您通过编辑strings.xml文件同时更新所有布局中出现的每个单词“Yellow”。
它对于支持多种语言也非常有用,因为可以为每种支持的语言使用单独的strings.xml文件。
示例:保存在res/values/strings.xml中的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="yellow">Yellow</string>
</resources>

此布局XML将字符串应用于视图:

<TextView android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="@string/yellow" />

同样,颜色应存储在colors.xml中,然后使用@color/color_name进行引用

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="Black">#000000</color>
</resources>
mctunoxg

mctunoxg2#

必须在strings.xml下创建它们

<string name="close">Close</string>

必须按如下方式替换和引用

android:text="@string/close"/>

即使XML文件显示为strings.xml,也不要使用@strings,否则它将无法工作。

mnemlml8

mnemlml83#

将字符串硬编码到布局文件/代码中并不是一个好的做法。您应该将它们添加到字符串资源文件中,然后从布局中引用它们。
1.这使您可以更新所有
只需编辑strings.xml文件即可同时创建布局。
1.它对于supporting multiple languages也非常有用,因为可以为每种支持的语言使用单独的strings.xml file
1.拥有@string系统的实际意义请阅读localization文档。它可以让您轻松地在应用程序中找到文本,然后将其翻译。
1.字符串可以很容易地国际化,允许您的应用support multiple languages with a single application package file(APK)。

    • 好处**
  • 假设你在代码中的10个不同位置使用了相同的字符串。如果你决定改变它呢?而不是搜索它在项目中的所有位置,你只需改变它一次,改变就会反映在项目的每个地方。
  • 字符串不会使您的应用程序代码变得混乱,从而使代码清晰且易于维护。
uplii1fm

uplii1fm4#

你可以进入设计模式,选择警告底部的“修复”,然后弹出一个窗口(看起来像是要注册新的字符串),瞧,错误被修复了。

wgxvkvu9

wgxvkvu95#

一个好的做法是在String.xml中编写文本
示例:
String.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="yellow">Yellow</string>
</resources>

和内部布局:

<TextView android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/yellow" />
waxmsbnn

waxmsbnn6#

除了多语言的特殊情况之外,几乎在所有其他环境中使用的全局查找和替换方法有什么问题吗?
“一个地方”的论点似乎是虚假的。改变一个字符串“黄色”不会影响另一个,例如:“黄色油漆”!

相关问题