2011-12-17 6 views
1

元のアンドロイドのソースコードを探しています。レイアウトファイルのandroid:text属性が、@ string /を介して参照される実際の文字列に解決されます(例:android:text = "@ string/hello")。 。その理由は以下の通りです:私は順番に前書かれたウィジェット、例を使用するカスタムXMLを使用して、私のレイアウトを設定するための完全に異なる方法で作成している:私がしたい:私は何をしたいかアンドロイドのためのAndroidソースコード:テキスト属性処理?

<dialog name="Homepage"> 
    <field type="Combobox" label="Enter"> 
</dialog> 

私の例ではlabel属性を:label = "@ string/enter"に変更することができるので、アンドロイドでローカリゼーション機能を利用することができます。

しかし、これらの@stringコマンドを処理するには、元のAndroidソースコード(バージョン2.3など)でこれがどこで行われているかを知る必要があります。これまでのところ、文字列リソースを取得するための唯一の方法は、context.getString(int resID)を使用することです。問題は、文字列 "@ string/enter"をres idに変換する方法ですか?私は私ができないと仮定します。それがアンドロイドがこれをどのように処理するのか不思議です。

誰かが正しい方向で私を指すことができると私は私の説明があまりにも混乱していないことを願って、私は本当に感謝しています:)。

+0

から再びオープニングラインを忘れてしまいました(こんにちは皆さん:) – AgentKnopf

+0

オープニングラインについては問題ありません。実際には、[この回答](http://meta.stackexchange.com/a/3021/167991)に記載されている理由により、署名とオープニングラインをSOに使用しない方が良いです。だから1つを投稿することは完全にOKであり、間違いなくここでは無礼とはみなされない。 :) –

+0

@alextrsc:返事をありがとう - 私の質問をクリアした理由、なぜ私は敬礼を追加することができないのか:) - 私はこれを将来についても心に留めておきます - もう一度ありがとう! – AgentKnopf

答えて

0

[..]困ったことに、文字列「@ string/enter」をres idに翻訳するにはどうすればいいですか?

これにはResources.getIdentifier()を使用できます。

@string/enterの解像度のIDを取得し、少量のサンプル:

Resources r = getResources(); 
int resId = r.getIdentifier("enter", "string", getPackageName()); 

リソースの形式は常に同じであることを考えると、あなたはこの文字列のうち、すべての3つの引数を解析することができますし、getIdentifier()にそれらを埋める:

@[<package_name>:]<resource_type>/<resource_name> 

PsのAccessing Resources

+1

うわー、これは簡単に理解でき、簡潔な答えに感謝します:)! – AgentKnopf

+0

Mhhh私はあなたの提案を試しましたが、何とか文字列リソース(getIdentifier(...)が0、すなわち無効なリソースを返します)が見つかりませんでした。 – AgentKnopf

+1

Ok - 問題を修正しました。正しいパッケージ名(context.getPackageName()でアクセス可能)を渡したときに文字列リソースが見つかりました。パッケージ名はnullであってはなりません。 – AgentKnopf

関連する問題