Widgetサイズの指定について

971 views
Skip to first unread message

xgni...@gmail.com

unread,
Aug 9, 2015, 12:03:55 PM8/9/15
to 日本Androidの会
初心者です。
現在ウィジェットアプリ開発をしているのですが
サイズ指定にて困り果てており、どうか知恵をお貸しいただけないでしょうか。

画面サイズ1920×1080 (FHD)
DPI 480(xx-High)
androidOS 4.2.2

これの5インチ用スマホ向けの4×2のウィジェットで開発中なのですが
minWidthとminHeightでサイズ指定をするのに
4.0以降のandroidは「70 × n − 30」の計算式を元に指定すると書かれていたので

minWidth:250dp
minHeight:110dp

これで作ってみました。
が、縦の領域が4×3になります。

その為、一度旧計算式を使って指定してみました。
が、状況は変わりませんでした。

2カラムの指定で3になるなら、1カラムの指定で2になるかと思い
下記の

minWidth:294p
minHeight:72dp

で指定したところ、端末によっては4×2になるのですが、4×3のまま改善なしの端末もあります。
どのように指定したら4×2にのサイズで指定できるでしょうか。

※ちなみに当方が所持しているandroidタブレットでの表示は問題なかったです。
 知り合いのスマホ端末に入れると、4×3になってしまいます…。

ももんが

unread,
Aug 14, 2015, 10:25:20 AM8/14/15
to android-g...@googlegroups.com
ももんがです。
亀レスですが。

ウィジェットのセルサイズの計算ですが、OSではなく、ホームアプリで行っています。
つまり、利用しているホームアプリによって計算式が異なります。

以前、サンプルウィジェットアプリを作成して、サイズを1dpずつ変更しながら
Nexus4とNexus10の標準ランチャーを利用して検証したことがあります。
結果、ウィジェットのtargetSdkVersionによっても計算式が異なりました。
メモによると2014年6月に行ったようなので、KitKatでの検証結果だと思います。
その検証結果を元にした私のアプリのコードを記載しますので、参考にしてください。
(標準ランチャーなのに「70 * n - 30」になっていないのは謎ですが…)

//targetVersionにより計算式の変数値が異なる。
if (targetVersion < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
sizePerCell = r.getDimensionPixelSize(R.dimen.cell_size_old); //80dp
sizePerCellMinus = r.getDimensionPixelSize(R.dimen.cell_size_minus_old); //0dp
} else {
sizePerCell = r.getDimensionPixelSize(R.dimen.cell_size); //80dp
sizePerCellMinus = r.getDimensionPixelSize(R.dimen.cell_size_minus); //16dp
}

//minSizeが0の場合はcellSizeも0にする。
cellSizeWidth = minWidth != 0 ? (int) Math.ceil((minWidth + sizePerCellMinus) / sizePerCell) : 0;
cellSizeHeight = minHeight != 0 ? (int) Math.ceil((minHeight + sizePerCellMinus) / sizePerCell) : 0;


2015年8月9日 23:47 <xgni...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには android-group-j...@googlegroups.com にメールを送信してください。
このグループに投稿するには android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

ももんが

unread,
Aug 14, 2015, 10:44:18 AM8/14/15
to android-g...@googlegroups.com
五月雨ですいません、もう1点。

先ほどの計算式でセルサイズが「4 × 2」と算出されても、
ウィジェットそのもののレイアウトが「4 × 3」のサイズを必要とする場合、
「4 × 3」で表示されるかもしれません。

ウィジェットのレイアウトがmatch_parentやwrap_contentで指定されていれば
問題無いと思いますが、数字で指定しているのであれば、一度レイアウトの
サイズを見なおしてみてはいかがでしょうか。

2015年8月14日 23:24 ももんが <ss.mo...@gmail.com>:

Jun Shiozawa

unread,
Aug 17, 2015, 1:52:14 AM8/17/15
to android-g...@googlegroups.com


塩澤です。
1ピクセル=1ドット
1インチ=2.54センチメートル
Google社独自の単位と思われるdpですが
1dp=160分の1インチ
です。
つまり、160dpiのディスプレイにおける1ピクセルが1dpとなります。
(1インチの長さに160ピクセルが詰まると160dpi)
1dpはリアルな世界における長さ・大きさであり
1dpの長さ・大きさは
ディスプレイのインチ数・解像度・ピクセル数とは無関係です。
したがって
さまざまなインチ数・解像度・ピクセル数の
ディスプレイを持つAndroid機が世の中に存在する以上
質問者さんの目的から考えて
単位dpでの指定は違うような気がします。wrapとかかなぁ。

2015/08/10 1:03 <xgni...@gmail.com>:

Jun Shiozawa

unread,
Aug 17, 2015, 2:29:16 AM8/17/15
to android-g...@googlegroups.com

塩澤です。
320dpiの例を書き忘れてしまいましたが
分かりやすくするために念のため
1インチ=2.54センチメートル
1dp=160分の1インチ
つまり
160dpiのディスプレイにおける1ピクセルの長さ・大きさが1dp
320dpiのディスプレイにおける2ピクセルの長さ・大きさが1dp
したがって
単位dpはディスプレイのピクセル数・解像度・インチ数と無関係なリアルな世界の「ものさし」になります。
したがって質問者さんの目的から考えて単位dpでの指定は違うかなぁ、と。

2015/08/17 14:51 "Jun Shiozawa" <hares...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages