web-dev-qa-db-ja.com

XMLの整数リソースへのアクセス

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

別のリソースファイルでアクセスすることは可能ですか、何か不足していますか?

31
Rafiq

最後に、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);
35
Rafiq

受け入れられた答えは完全に誤解です。特定の固有の理由がない限り、パディングサイズの設定に整数リソースを使用しないでください。 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レイアウトの操作

10
Jay Soyer

また、この方法で定義できます:

<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);
4
Arash

整数リソースを使用している場合は、このようにR.Integer.yourintvalueを使用する必要があります

int value=(int) contextG.getResources()
            .getDimension(R.integer.myvalue);
2
Sydroid