this を読んだところ、Javaクラスで整数リソースにアクセスする方法が見つかりましたが、別のリソースのドキュメントはありません。
Res/values/integers.xmlにあるリソース
<resources>
<integer name="input_field_padding" >5</integer>
</resources>
EditTextのinput_field_paddingにアクセスしようとしました。
<EditText
Android:id="@+id/user_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:padding="@integer/input_field_padding" />
しかし、私は次の例外を受け取りました
Java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x10
別のリソースファイルでアクセスすることは可能ですか、何か不足していますか?
最後に、XMLのディメンとしてコードと整数値Javaで整数リソースにアクセスできます。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="input_field_padding">20dip</dimen>
<integer name="input_field_padding">20</integer>
</resources>
Xmlファイルで:-
<EditText
Android:id="@+id/user_name"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:padding="@dimen/input_field_padding" />
In Java file:-
EditText mUsername = (EditText) this.findViewById(R.id.user_name);
//int padding = this.getResources().getInteger(R.integer.input_field_padding);
int padding = (int) this.getResources().getDimension(R.dimen.input_field_padding);
mUsername.setPadding(padding, padding, padding, padding);
受け入れられた答えは完全に誤解です。特定の固有の理由がない限り、パディングサイズの設定に整数リソースを使用しないでください。 XMLだけでなく、コードでも。これがUnsupportedOperationException
を経験した理由です。整数リソースは、画面のDPIに基づいてスケーリングされません。つまり、すべてのデバイスで一定の間隔でパディングが行われるわけではありません。 Dimenリソースは自動的に値を調整します。 Javaコードは次のようになります。
EditText mUsername = (EditText) this.findViewById(R.id.user_name);
int padding = (int) this.getResources().getDimension(R.dimen.input_field_padding);
mUsername.setPadding(padding, padding, padding, padding);
ところで、既にXMLでEditText
要素のパディングを設定している場合、これをコードで設定する必要はありません。実行時に別の値に変更する場合を除きます。
詳細はこちら:
密度独立
XMLレイアウトの操作
また、この方法で定義できます:
<resources>
<item name="text_line_spacing" format="integer" type="dimen">10</item>
</resources>
形式=囲むデータ型:
float boolean fraction integer ...およびtypeは以下を表します。
タイプ=リソースタイプ(R.XXXXX.nameで参照):
色調文字列スタイルなど...
次のようにアクセスします。
Resources res = getResources();
int i= res.getInteger(R.dimen.int_value);
整数リソースを使用している場合は、このようにR.Integer.yourintvalueを使用する必要があります
int value=(int) contextG.getResources()
.getDimension(R.integer.myvalue);