年月を選択するダイアログ

Android には標準で DatePicker が用意されているけど、当然年月日を選択するダイアログです。
まれに年月だけを選択するダイアログが欲しくなるけど、イチから作るのも面倒。

DatePicker の日付だけ落せばいいんじゃね?ということでやってみた。

AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
final DatePicker datePicker = new DatePicker(getContext());
datePicker.updateDate(year, month, 1);
int day_id = Resources.getSystem().getIdentifier("day", "id", "android");
datePicker.findViewById(day_id).setVisibility(View.GONE);
builder.setView(datePicker)
       .setTitle(getContext().getString(R.string.select_month))
       .setPositiveButton(android.R.string.ok,
                          new DialogInterface.OnClickListener() {
                              @Override
                              public void onClick(DialogInterface d, int w) {
                                  /* むしゃむしゃ */
                              }
                          })
       .setNegativeButton(android.R.string.cancel, null)
       .create()
       .show();

ミソは

int day_id = Resources.getSystem().getIdentifier("day", "id", "android");
datePicker.findViewById(day_id).setVisibility(View.GONE);

だけ。
DatePicker の日付の部分のリソースIDは R.id.day なんだけど、普通は触れない、でも触れる。

ViewGroup#getChildAt() とか使って決め打ちで View を取り去ると言語を US に切り替えた途端に残念なダイアログができあがるので注意。