2012年10月23日火曜日

【訂正】ウィジェットサイズの指定について

あちゃー
以前の投稿 でウィジェットサイズの指定についてを言及してましたが、解釈に間違いがありました。
鵜呑みにしてしまった方、すみません・・・。


事の発端は Nexus 7 で開発中のアプリを動作させてみたところ、意図したセル数にならないことに気が付きました。


以前の記事では、
Android 4.0以前では

74dip × n - 2dip

を指定し、Android 4.0 以降では

70dip × n − 30dip

を利用する旨を書いていましたが、これが勘違いでした。


-----------------------------------------------------
ここからが、訂正後の話。(この解釈も間違っていたらゴメンナサイ。。)

意図したセル数を指定するには、大雑把には  74dip × n - 2dip でいいのですが、この値を 最小値 と捉えてはいけなかった。(原文に Minimum size って書いているけども。)

「1セル を指定するには 74dip × n - 2dip = 72dip を minWidth および minHeight に指定すれば良い。」

ではなく、1セルに収めるには 72dip 以内に収めること。と考えなくてはいけなかった。 当たり前といえば当たり前。

つまり、minWidth = 1dip と指定しても 30dip と指定しても 72dip を超えなければ、1セルに収まります。

1セルを指定したいがために、範囲の最大値である72dip を指定する必要はありません


これを行ったがために 以前の投稿に書いたとおり、Galaxy Nexus の問題に遭遇しました。



-----------------------------------------------------
Galaxy Nexus の問題とは、minWidth = 72dip , minHeight = 72dip を指定しているのに、Galaxy Nexus だと 2×2セルが確保されてしまうものでした。 他のFroyo端末だと 1×1セル となっている。

これは、 74dip × n - 2dip はあくまで 推奨値 であり 目安 に過ぎなかったのです。

他の端末とは解像度が異なるため、Galaxy Nexus だと 1セルの範囲値が以下となっていました。(地道に1つずつ調べました・・・。)


1セル  ~64dip
2セル  ~144dip
3セル  ~224dip
4セル  ~304dip
 :       :
nセル  80dip × n - 16dip


上記に照らし合わせると minWidth および minHeight を 72dip で指定していると、2セル確保されてしまうのです。


【余談】
色々なウィジェットアプリを入れてみたのですが、Galaxy Nexus 以外だと 1×1セルなのに、Galaxy Nexus だと 2×2セルになっているアプリがチラホラありました。一方、SDKに付属してくるApi Demos アプリをみると、ちゃんと1×1セルになっています。ソースをみると minWidth = 60dip 、 minHeight = 30dip と指定していました。必要な領域をきちんと指定していました。なるほど。

-----------------------------------------------------

さて、今回の問題が発覚した Nexus 7 ですが、これまたセルの範囲値が他の端末と異なっていました。
(解像度が全然違うので、そりゃそうですね・・)

1セル  ~79dip
2セル  ~176dip
3セル  ~272dip
4セル  ~368dip





ちなみに開発中のウィジェットアプリは minWidth = 250dip 、 minHeight = 40dip と指定していました。
これだと、Galaxy Nexus だと  1×4 セル 確保されるのですが、Nexus 7 だと  1×3 セルしか確保されません。


-----------------------------------------------------

そろそろ、まとめ。。

ウィジェットの領域はセル数を指定できるように出来ていない。ってことを理解しなくてはいけないですね。どの端末でも、意図したセル数を確保したいのですが、現状の作りでは困難。(・・・ですよね?)

dip で指定するしかないですが、その目安となる値も、多種多様な端末の前では、ズレが起きてしまう。

1セル、2セル、3セルぐらいなら、何とかなりそうですけど、4セル、5セル使うようなウィジェットだと、スマホにも対応しつつ、解像度が異なるタブレットにも対応する・・・っとなると大変そう・・・。


そんなわけで、長くなりましたが、このへんで。

ウィジェットに苦しんでいる人の参考 になれば幸いです。

※間違い等がありましたら、 お知らせください。






訂正後の情報は Android Memo Wiki にまとめています。



0 件のコメント:

コメントを投稿