2017-05-04 6 views
0

こんにちは私はAndroidの学習に関する本のチュートリアルに従っていますが、本は古くなっています。私は "文字列リテラルは翻訳できません"と "テキストをsetTextと連結しない"を取得しています。 TextViewを更新する正しい方法は何ですか?私はそれが本質的にやりたいことだと思う。textViewを正しく更新するにはどうすればよいですか?

<TextView 
    android:id="@+id/textScore" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Score: 999" 
    android:textSize="36sp" 
    android:layout_alignParentBottom="true" 
    android:layout_toLeftOf="@+id/textOperator" 
    android:layout_toStartOf="@+id/textOperator" /> 

<TextView 
    android:id="@+id/textLevel"`enter code here` 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Level: 4" 
    android:textSize="36sp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:layout_marginRight="11dp" 
    android:layout_marginEnd="11dp" /> 

ここにはJavaがあります。

textObjectScore.setText("Score:" + currentScore); 
    textObjectLevel.setText("Level:" + currentLevel); 
+0

「String textToSet =」スコアを作成するとどうなりますか?「+ currentScore;」、「textObjectScore.setText(textToSet); '? –

答えて

2

これらは両方とも翻訳に関係します。

"文字列リテラルは変換できません"。これは、ユーザーが電話を変更する言語にかかわらず、この文字列が英語で表示されることを示す警告です。プロのアプリの場合、strings.xmlで文字列を定義し、その文字列をアプリで使用します。これにより、翻訳ファイルを提供していると仮定して、文字列を電話のロケール用に選択することができます。

"テキストをsetTextと連結しない"。あなたの母国語でこれを行うことに実際の問題はありません。問題は、他の言語では、あなたがやっていることが文法上の意味を持たないかもしれないということです。代わりに、strings.xmlに入力変数を含む文字列を定義し、getStringを使用してこれらの変数を設定する必要があります。

しかし、国際的なリリースには向かないものをすばやく一緒に投げるために、あなたは大丈夫です。

0

ガイドライン(https://developer.android.com/guide/topics/resources/string-resource.html)に従ってください。

<string name="score">Score: %1$d</string> 

そして、このようにそれを設定します:たとえば、このようなあなたのスコアに関連する文字列を指定しますが、文字列を翻訳することができ

Resources res = getResources(); 
String text = res.getString(R.string.score, currentScore); 
textObjectScore.setText(text); 

この方法で、安全に複数形やフォーマットを提供。

関連する問題