web-dev-qa-db-ja.com

ソースコードからres / values / dimension.xmlからディメンション値をロードする

値をそのままロードしたいのですが。 2つのdimension.xmlファイルがあります。1つは/res/values/dimension.xmlに、もう1つは/res/values-sw360dp/dimension.xmlにあります。

ソースコードから私は何かをしたいのですが

getResources().getDimension(R.dimen.tutorial_cross_marginTop);

これはうまくいきますが、私が得る値はスクリーン密度係数(hdpiでは1.5、xhdpiでは2.0など)を掛けたものです。

私もやってみました

getResources().getString(R.dimen.tutorial_cross_marginTop);

これは原理的にはうまくいきますが、 "dip"で終わる文字列を取得します。

307

私のdimens.xmlには

<dimen name="test">48dp</dimen>

コード内

int valueInPixels = (int) getResources().getDimension(R.dimen.test)

これは72を返しますdocs状態として現在の電話の密度を掛けます(私の場合48dp x 1.5)

docsが述べている通り:

特定のリソースIDの次元を取得します。単位変換は、リソースに関連付けられている現在のDisplayMetricsに基づいています。

そのため、xmlのように正確なdp値が必要な場合は、それをDisplayMetrics密度で割ります

int dp = (int) (getResources().getDimension(R.dimen.test) / getResources().getDisplayMetrics().density)

dpは48になります

727
AndroidGecko

Resourceクラスにはメソッド getDimensionPixelSize() もあります。これはあなたのニーズに合うと思います。

19
Ovidiu Latcu
Context.getResources().getDimension(int id);
18
Jug6ernaut

リソースにいくつかのint値を保存するだけでいい人には、次のことができます。

integers.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="default_value">100</integer>
</resources> 

コード

int defaultValue = getResources().getInteger(R.integer.default_value);
12
Suragch

GetDimensionの代わりにgetDimensionPixelOffset()を使用できるので、intにキャストする必要はありません。

int valueInPixels = getResources().getDimensionPixelOffset(R.dimen.test)
8
Jonny Right

あなたはxmlファイルにも整数を書くことができます。
あなたは[this] http://developer.Android.com/guide/topics/resources/more-resources.html#Integer を見ましたか?使用 。

 context.getResources().getInteger(R.integer.height_pop);
3
AndroidLad
    This works but the value I get is multiplied times the screen density factor
  (1.5 for hdpi, 2.0 for xhdpi, etc).

私はそれが解像度に従って値を取得するのは良いことだと思いますが、これをしたくないのであればpxでこれを与えてください.......

濃度独立ピクセル(dp)

レイアウトの寸法や位置を密度に依存しない方法で表現するためにUIレイアウトを定義するときに使用する必要がある仮想ピクセル単位。濃度に依存しないピクセルは、160 dpiの画面上の物理的な1ピクセルに相当します。これは、「中」の濃度のスクリーン用にシステムによって想定されるベースライン濃度です。実行時に、システムは必要に応じて透過的にdp単位の拡大縮小を処理します。based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels.アプリケーションのUIを定義するときは、常にdp単位を使用して、密度の異なる画面にUIを正しく表示するようにします。

解像度ごとに値を変更するのは良いことだと思いますが、これをしたくない場合はpxでこれを指定してください.......

このリンクを参照してください リンク

これに従って

dP

密度に依存しないピクセル - 画面の物理的な密度に基づく抽象的な単位。これらの単位は、160 dpi(1インチあたりのドット数)の画面を基準としています。1dpiは1 pxとほぼ同じです。 When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen's dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down. dpとピクセルの比率は画面の密度によって変わりますが、必ずしも正比例するわけではありません。 (px単位の代わりに)dp単位を使用することは、レイアウト内のビューのサイズをさまざまな画面密度に合わせて適切にサイズ変更するための簡単な方法です。言い換えれば、それは異なるデバイス間であなたのUI要素の実世界のサイズのための一貫性を提供します。

px

ピクセル - 画面上の実際のピクセルに対応します。実際の表示はデバイスによって異なるため、この測定単位はお勧めできません。各装置は、1インチ当たりのピクセル数が異なっていてもよく、スクリーン上で利用可能な総ピクセル数がこれより多くても少なくてもよい。

2
Dheeresh Singh