0

由于与工作相关的问题,我安装了 Eclipse 的工作计算机没有互联网连接,因此所有代码和 LogCat 文本都是手动输入的,而不是复制和粘贴,因为我现在安装了 Eclipse 的单独笔记本电脑上。所以请容忍我的任何错别字。

现在到了这个问题。在我的应用程序的新版本中,我使其支持西班牙语。我将所有字符串本地化为strings.xml. 下面是我没有用来实现的 Java 代码。

public class SplashScreen extends SwarmActivity {

  Context c;

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splashscreen);

    loading = (TextView)findViewById(R.id.loading);
    //loading.setText(c.getResources().setString(R.string.loading));  //This way gives NPE
    //loading.setText(R.string.loading);  //This way works
    //loading.setText("Test");  //This way works
  }
}

如果我理解localization正确,我必须首先 getResources() 以便应用程序知道要显示的字符串的语言。但是 getResources() 让我很困惑。

我需要做什么才能正确显示字符串?

4

2 回答 2

2

为了回答您的问题,您忘记初始化Context object. c空也是如此。替换 loading.setText(c.getResources().setString(R.string.loading));

loading.setText(getResources().setString(R.string.loading));

但实际上没有必要这样做。

Android 在运行时根据设备的区域设置加载适当的资源。

你只需要在你的项目中尊重这个层次结构:

res/
       values/
           strings.xml
       values-es / (here for spanish values)
           strings.xml
       values-fr /
           strings.xml (here for french values)
于 2013-05-03T15:31:42.807 回答
0

你有这个代码

Context c;

public void onCreate(Bundle savedInstanceState) {
    ...
    loading.setText(c.getResources().setString(R.string.loading));  //This way gives NPE

成员c在使用之前永远不会被设置。这就是NullPointerException. c例如,您必须首先初始化View.getContext()

本地化是根据设备的功能和设置自动处理的。

在您的布局定义中,您可以使用对字符串 id 的引用来定义文本字符串,Android 将自动加载相应的资源

res/layout/splashscreen.xml

...
<TextView android:id="@+id/loading"
    android:text="@string/loading"
    .../>
...

因此无需在代码中显式设置文本字符串,因为 Android 已经这样做了。您唯一需要做的就是在res/values*/strings.xml文件中定义适当的文本字符串。

于 2013-05-03T15:34:36.710 回答