知らないわけにはいかないAndroid strings.xmlの件

3529 ワード

信じてxmlはすでにAndroid開発で最もよく知られているファイルの一つですが、実は注意すべき点や小さなテクニックもたくさんあります.これらがAndroidアプリケーションをより規範的に使いやすくすることができることを知っていますので、見てみましょう.:)
多重化しない
この1つは多くの人が異なる意見を持っているかもしれません.広く流行しているプログラミング理念がコードを多重化することを教えているからです.もちろん、コード多重化は良い理念で、プログラムをより簡潔にすることができます.しかし、何でも多重化したい思考慣性を形成しやすく、一部のシーンでは面倒になる可能性があります.
例えば、アプリケーションのログインと登録インタフェースで同じ文字列-R.stringを使っていることを想像してみてください.loading.
Loading...

その後、製品が変更され、それぞれ異なるプロンプトを使用する場合は、2つのstringを新たに作成し、コードで構成する必要があります.最初から異なるページに別々に構成する場合はstringsを修正するだけです.xmlファイル.
    ...
    ...

無視しやすい理由の一つは、国内のユーザーだけでなく、他の言語系のユーザーにも直面したくない場合、予想外の問題を引き起こす可能性があるからです.
いくつかの言語は同じ意味で異なる文脈の下で、異なる単語を使うので、味が経験したことがあるのは自然にわかります.
良好なファイル構造

   
  



   
  


決して面倒に思わないでstringsを組織しなさい.xmlファイルは、アプリケーションが複雑になると、検索したり観察したりすることで、修正したい文字列を簡単に見つけることができます.
書式設定
文字列の綴り方は絶対に使用しないでください.異なる言語の文の順序が多様で、文字列の綴りはあなたの論理を非常に複雑にします.
文字列フォーマットを使用することも考えられます.
Hello, %1$s! You have %2$d new messages.

%1$sはフォーマットされる文字列を表し、%2$dはフォーマットされる数値を表し、2番目の位置にあります.
// Java   :
Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);  //        。

複数名詞
次のようにJavaコードで単語の複数の問題を処理しないでください.異なる言語は複数の言語に対して異なる文法規則があるからです.

book
books


if (bookCount == 0) {
    text = getString(R.string.book);
} else {
    text = getString(R.string.books);
}

正しい方法はgetQuantityString(int id,int quantity)メソッドを使用することです.

    book
    books


int bookCount = 4;
Resources res = getResources();
String bookCount = res.getQuantityString(R.plurals.book, bookCount);
// result: books.

もちろんQuantity Stringはoneだけでなくzero,two,few,many,otherもサポートしています.それぞれの場合、どんな言葉を使うかを自由に決めることができます(もちろん、中国語環境ではあまり役に立たないかもしれません).
さらにQuantity Stringは、上記のフォーマットと組み合わせて使用することもできます.

    %d book found.
    %d books found.


int count = 4;
Resources res = getResources();
String bookCount = res.getQuantityString(R.plurals.book, count, count);
// result: 4 books found.

Google政府は、開発者として少なくとも名詞に「one」と「other」の属性を提供するべきだと提案しています.
テキストのハイライト
ForegroundColorSpanまたはSpannablesStringBuilderでテキストの一部をハイライトできることはご存じかもしれませんが、この2つの方法は、ハイライトされる文字の特定の位置をパラメータとして使用するため、多言語アプリケーションにとって最良の方法ではない可能性があります.サポートが必要な言語が多く適用されると、Javaコードが大量に書かれ、ハイライトされるコンテンツの位置が頻繁に計算されます.
このときはHTMLを試してみることができます.

Hello world.
]]>


TextView tv = (TextView) findViewById(R.id.tv_txt);
tv.setText(Html.fromHtml(getString(R.string.html_text)));

これもフォーマットの1つで、色を定義するだけでなく、を使用して文字列に太字、斜体、下線をそれぞれ持たせることもできます.
実はstrings.xmlの使い方は多くの人が考えているほど簡単ではありません.ここでもレンガを投げて玉を迎えます.もっと詳しい使い方を知りたいなら、公式ドキュメントを参考にしてください.:)