10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AndroidのLayout関連で躓いたところ

Last updated at Posted at 2013-08-27

その1 getDemensionさん問題

前提知識

  • androidのResources(xxxx.xml)ではstringはもちろん、integerなどが指定できる。
  • この中にdimenというものが存在する。
  • これはサイズを指定するときに使用するものであり、float型と単位を指定することが出来る。
    • 例としてこんなかんじ
<dimen name="sampleSP">10sp</dimen>
  • これをLayoutで使用する場合は全く問題ない。
<TextView android:textSize="@dimen/sampleSP"/>
  • TextSizeに10spが入るので、直接Layoutに10spを指定する場合とおなじになる。

問題

  • dimenで指定したサイズを使って、動的にLayoutを作成しようとした時に問題が起こった。
TextView textView = (TextView) findViewById(R.id.sampleText);
textView.setTextSize(this.getResource.getDimmension(R.dimen.sampleSP));
  • 上記のように記述すると、表示されるテキストのサイズがだいぶ大きく表示されてしまった。
  • getDimmensionで取得できる値をダンプした結果、2倍の値になっていた。

なぜ?

  • getDimmensionで取得できる値はspではなく、pxの値が取得できる。
  • また、AndroidManifest.xmlでanyDensityをtrueにしていた場合、端末の解像度に合わせてpxを算出してくれる。
    • 使用していた端末がGalaxyNexus(xhdpi)の為、mdpi -> xhdpiは2倍なので、2倍の値が取れていた。

参考

その2 shadowXさん問題

問題

  • XMLのdimenを覚えてヒャッハー、dimen便利だぜーと調子ぶっこいていて以下のコードを書きました。
<dimen name="shadowX">3.0dp</dimen>
<TextView android:shadowX="@dimen/shadowX"/>
  • 結果は
    • Caused by: java.lang.NumberFormatException: Invalid float: "3.0dip"
  • 落ちました。

対策

  • しょうがないにゃあ・・・
<string name="shadowX">3.0</string>
<TExtView android:shadowX="@string/shadowX" />

その他

  • shadowXの指定単位がわからない。公式に単位の記述がないんだよね。
  • 一応、dp指定らしいけど。
10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?