ワンポイントレッスン、らしいのでメモ。
Androidでドロップダウンメニューを作る場合は「spinner」を使う。
PHPフレームワークを選ぶと簡単な解説が出るサンプルを作った。
解説文はwikipediaの各フレームワークの冒頭文から転載。
目次
レイアウト
xmlはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="フレームワークを選んでください" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Spinner android:id="@+id/spinner1" android:layout_width="170dp" android:layout_height="wrap_content" android:layout_weight="1.15" /> <Button android:id="@+id/button1" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="OK" /> </LinearLayout> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout> |
Spinnerがドロップダウンメニューとして機能する。
コード
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import android.os.Bundle; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { Spinner spinner; Button btn; TextView tv; String msg = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findView(); makeAdapter(); addEvent(); } private void findView() { spinner = (Spinner) findViewById(R.id.spinner1); btn = (Button) findViewById(R.id.button1); tv = (TextView) findViewById(R.id.textView2); } private void makeAdapter() { ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); String[] frameWork = {"CakePHP","Symfony","Zend Framework","CodeIgniter","FuelPHP"}; for (String string : frameWork) { adapter.add(string); } spinner.setAdapter(adapter); } private void addEvent() { btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { switch ((int)spinner.getSelectedItemId()) { case 0: msg = "CakePHP(ケイクピーエイチピー)とは、PHPで書かれたオープンソースのWebアプリケーションフレームワークである。先行するRuby on Railsの概念の多くを取り入れており、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークと言われている。MITライセンスの元でフリーで配布されている。"; break; case 1: msg = "Symfony は Model View Controller (MVC) パラダイムに従ったWebアプリケーションフレームワークで、PHPで書かれている。symfony-project.com というサイトは2005年10月18日に立ち上げられた。"; break; case 2: msg = "Zend Framework (ZF) は、PHP 5 で実装されたオープンソースのオブジェクト指向Webアプリケーションフレームワークであり、修正BSDライセンスで提供されている。"; break; case 3: msg = "CodeIgniter(コードイグナイター)は、PHPを用いて動的Webサイトを構築するために利用するオープンソースのWebアプリケーションフレームワークである。 CodeIgniterには、一般に必要とされるプログラミングタスクに対する豊富なライブラリが用意されているだけでなく、それらのライブラリにアクセスするためのシンプルなインターフェースと論理的な構造が用意されている。開発者はこれらが備わったCodeIgniterを用いることで、より短時間でアプリケーションを構築することができる。 CodeIgniterの最初の公開バージョンは、2006年2月28日にリリースされた。"; break; case 4: msg = "FuelPHP は、PHP 5で書かれたオープンソースのHMVCパターンを用いるWebアプリケーションフレームワークである。MITライセンスで提供されている。"; break; } tv.setText(msg); } }); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View arg1, int arg2, long arg3) { spinner = (Spinner)parent; Toast.makeText(MainActivity.this, spinner.getSelectedItem().toString(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); } } |
setDropDownViewResource
ArrayAdapterクラスのメソッド。
Spinnerがドロップダウン表示する際の画面レイアウトを定義する。
引数はドロップダウンビューを定義したレイアウトリソース(int型)。
今回はandroid.R.layoutで予め定義されている、simple_spinner_dropdown_itemを表示形式として指定している。
getSelectedItemId()
AdapterViewクラスのメソッド。
選んだアイテムの値を返す。long型で。
なので今回はswitch文に使う都合でintにキャストしている。
setOnItemSelectedListener
AdapterViewクラスのメソッド。
このAdapterViewの項目が選択されているときに呼び出されるコールバックを登録する。
引数は実行されたコールバック。
OnItemSelectedListener()
Viewの項目が選択されている時に呼び出されるコールバック用のインターフェイス。
抽象メソッドとして選んだ時のonItemSelectedと選ばなかった時のonNothingSelectedが定義されている。ナッシングの方は正直使い道分からないって先生は言ってた。正直自分でもそうだし隣の人も正直呼ばれるタイミング分かんないってなってた。でも抽象メソッドとして定義されているので実装しないとキレられる。
処理の流れ
- ビューを作る
- spinner用にString型のArrayAdapterを用意
- adapterに選択肢となる文字列をadd
- spinnerにadapterをセット
- ボタンを押した時にドロップダウンで選んだものの解説が表示される
説明文と選択したものが対応するようにswitch文を用意。
加えて意味は無いが練習用にドロップダウンで選ぶだけで選んだものがToast表示されるようにした。
真面目に訓練記事書くの大変やね・・・
久しぶりに書くとひぃひぃするワー
コメント
No Trackbacks.