概要
Android の標準 API のGUI部品に DatePicker というものがある。こういうやつ↓
このうち、+と?のボタンで数字をサンドイッチしている部分だけを単独で使いたかったのだけど、いろいろ調べた挙句、標準 API では使えないっぽいという話。
ライブラリを調べたけど見つからず
最初は、こんな便利そうなコンポーネントなのだから、android.widget パッケージのどこかにあるんと違うかーと思ったのだけど、見つからない。検索しても見つからない。
ちなみに、こういうGUI部品は、一般的にはスピンボタン、あるいはSpinner などと呼ばれるべきものらしい。android.widget.Spinner とはまた違うのかな。
ライブラリのソースを調べて被疑者確保
どうやらライブラリの中にはなさそうだということで、DatePicker のソースをあたることにした。
で、メンバに NumberPicker という、明らかにそれっぽいクラスを発見。
package android.widget; ... import android.widget.NumberPicker; import android.widget.NumberPicker.OnChangedListener; ... @Widget public class DatePicker extends FrameLayout { ... /* UI Components */ private final NumberPicker mDayPicker; private final NumberPicker mMonthPicker; private final NumberPicker mYearPicker; ...
ところが、SDK のライブラリを探しても、android.widget.NumberPicker なんてクラスは見当たらない。なんでだー?
SDK とオープンソースのパッケージではライブラリの構造が違うのか??
NumberPicker で検索したら、同じように使えねーと言っている人が多数散見せられた。それらによると、NumberPicker は、 com.android.internal.widget.NumberPicker.java とかいうところにあって、インターナル(=public でないクラス?)のため、使えないらしい。
NumberPiker を使う方法
ライブラリの NumberPicker を直接扱うことはできなさそうだけど、ソースが公開されている以上、同じものを作ることはできそう。
実際、公開ソースをもとにして?、NumberPicker の関連リソース一式を公開している人もいるので、それをそのまま使ってしまう方法も考えられる。
あるいは面倒だけど自分で作るか。標準ライブラリで使えるようにしてくれればいいのにね。
参考文献
- Welcome to Android | Android Open Source <http://source.android.com/>
- Using the internal NumberPicker widget – Android Developers | Google グループ <http://groups.google.co.jp/group/android-developers/browse_thread/thread/761a2309971cd05f>
- 使わせてくれよー – Kazzzの日記 <http://d.hatena.ne.jp/Kazzz/20100422/p1>
- NumberPicker Widget for Android | Quietly Coding <http://www.quietlycoding.com/?p=5>