読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

Fancyみたいなメニュー(スピナー)の作り方

Android

概要

Fancy - Google Play の Android アプリ
みたいなメニューを作る

f:id:tiro105:20140428171127p:plain
押すとダイアログが出る
f:id:tiro105:20140428171229p:plain

やり方
独自ボタンにspinner style(@android:style/Widget.Holo.Light.Spinner)を適応する。
そのボタンにダイアログを設定する。

ボタンのstyle

<Button 
    android:id="@+id/spinner_button"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    style="@android:style/Widget.Holo.Light.Spinner"/>

dialogFragment

@Override  
public Dialog onCreateDialog(Bundle savedInstanceState) {  
    LayoutInflater inflater = getActivity().getLayoutInflater();  
    View view = inflater.inflate(R.layout.custom_dialog, null, false);  
	listView = (ListView)view.findViewById(R.id.listView);
	
	ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), R.layout.rowlayout, data);
	listView.setAdapter(arrayAdapter);
	listView.setOnItemClickListener(this);
	
    builder = new AlertDialog.Builder(getActivity());  
    builder.setTitle("list");  
    builder.setView(view);  
    mDialog = builder.create();
    return mDialog;
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
		long id) {
	// listviewのアイテムクリック時にspinnerボタンのテキスト修正
	PlaceholderFragment fragment = (PlaceholderFragment)getTargetFragment();
	fragment.setButtonText(data[position]);
	mDialog.dismiss();
}

案外簡単だった。
通常のspinnerじゃないのが少し罠かな。

参考
Y.A.M の 雑記帳: Android DialogFragmentを使うときの注意点。
[Android Tips] Spinnerの選択肢をAlertDialogで表示する | Developers.IO