3

プログラムレイアウトでdimens.xmlファイルの事前定義されたディメンションを使用したいと思います。

たとえば、私のdimens.xmlファイルには次のようなものがあります。

<dimen name="margin1">40dip</dimen>
<dimen name="margin2">40dip</dimen>

そして、私のプログラマティックテキストビューには次のようなものがあります。

RelativeLayout.LayoutParams lpMargin = new RelativeLayout.LayoutParams( R.dimen.margin1, R.dimen.margin2);

レイアウトパラメータをテキストビューに適用すると、巨大なビューになります。

私はすでに問題を見つけました。印刷した場合:

Log.e("Metrics", "margin width = " +  String.valueOf(R.dimen.margin1));

...それは巨大な価値を与えます:margin width = 2131034112。それを台無しにしているのは、ユニット「ディップ」です。

だから私の質問は:プログラムで呼び出すための単位なしで寸法を指定する正しい方法は何ですか?それが不可能な場合は、R.dimen.margin1を変更して、プログラムによるレイアウトパラメーターとして使用できますか?

編集:それはユニットがそれを台無しにしたのではありませんでした-それは内部IDを返しています!(ianhanniballakeが以下に言うように、私はと呼び出す必要がありましたgetResources().getDimension(R.dimen.margin1))。

4

1 に答える 1

14

使用する

getResources().getDimension(R.dimen.margin1)

また

getResources().getDimensionPixelSize(R.dimen.margin1)

コードは、XMLファイルで割り当てた値ではなく、「R.dimen.margin1」に割り当てられた内部IDを返します。

于 2013-03-01T03:02:07.507 に答える