独自レイアウトのListView
ListView
のItem
を独自レイアウトで定義する手順は以下の通り。
res/layout
フォルダに独自定義するレイアウトファイル
を用意Adapter
オブジェクトの生成時、SimpleAdapter(context:data:resource:from:to:)
のresource
およびto
に、
独自定義したレイアウトファイル
のR値
を指定(後述)
SimpleAdapterオブジェクト生成時のR値
SimpleAdapter(
context: Context!,
data: MutableList<out MutableMap<String!, *>!>!,
resource: Int
from: Array<String>!
to: IntArray!
)
// パラメータ
// context: Adapterを生成するアクティビティオブジェクト(=コンテキスト)
// data: Adapterに紐づけるリストデータ
// resource: リスト形式ビュー(ListView)のItemのレイアウトを表現するR値
// from: リストデータ(MutableMap)のキー
// to: リストデータ(MutableMap)の値を埋め込むTextViewのR値(ID)
Android SDK
で用意されたレイアウトを用いる場合のR値
はandroid.R.
、
独自定義
したレイアウトファイルを用いる場合のR値
はR.
から始める。
パラメータ | Android SDK |
独自定義 |
---|---|---|
resource |
android.R.layout. simple_list_item_2
|
R.layout. <レイアウトファイル名>
|
to |
intArrayOf( android.R.id.text1, android.R.id.text2 )
|
intArrayOf( R.id.<TextViewのid>, R.id.<TextViewのid> )
|
アクションバー
アクティビティ
のタイトルやアクション
を視覚的に表現する、アプリ上部に表示されるバー。
オプションメニュー
アクションバー
内に表示される、アイコン
形式のメニュー。
オーバーフローメニュー
アクションバー
内に十分な余白がなく表示できないオプションメニュー
が格納される、文字列
形式のメニュー。
オプションメニューの実装
参考: メニュー
オプションメニュー
を実装する手順は、以下の通り。
res
フォルダ内に、Resource Type: menu
のAndroid Resource Directory
を作成- 1.で作成したフォルダ内に、
Menu Resource File
(.xml
ファイル)を作成アクティビティ
クラスに、オプションメニュー
を表示するためのonCreateOptionsMenu()
メソッドを実装アクティビティ
クラスに、オプションメニューのアイテム
が選択された場合の処理を記述するonOptionsItemSelected()
メソッドを実装
Menu Resource Fileの記述
オプションメニュー
のItem
含むレイアウト
を定義するXML
ファイル。
Menu Resource File
参考: メニューリソース
アプリ
内に実装する各種メニュー
のレイアウトを定義するXML
ファイル。
メニュー
には、オプションメニュー
のほか、コンテキストメニュー
、サブメニュー
が含まれる。
定義
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/<ItemID>"
app:showAsAction="<アクションバーへの表示設定>"
android:title="@string/<strings.xmlで定義した文字列の変数名>"
android:icon="@drawable/<アイコンID>
/>
</menu>
showAsAction
Activity クラスの継承元 |
属性 |
---|---|
通常のActivity
|
android:showAsAction |
AppCompatActivity |
app:showAsAction |
showAsActionの属性値
属性値 | 内容 |
---|---|
never |
オーバーフローメニュー に格納 |
always |
常にアクションバー に表示(非推奨) |
ifRoom |
スペースに余裕があればアクションバー に表示余裕がない場合は オーバーフローメニュー に格納 |
icon
アクションバー
に表示する場合(=オプションメニュー
)は指定したアイコン
のみ表示され、
オーバーフローメニュー
に格納する場合はtitle
の文字列のみ表示される。
サンプルコード
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menuListOptionSetMeal"
app:showAsAction="never"
android:title="@string/menu_list_options_setMeal"
/>
<item
android:id="@+id/menuListOptionCurry"
app:showAsAction="never"
android:title="@string/menu_list_options_curry"
/>
</menu>
オプションメニューの表示
アクティビティ
開始時に呼び出されるonCreateOptionsMenu()
メソッドのブロック{...}
内に、
オプションメニュー
のItem
を定義したXML
を表示するMenuInflater.inflate()
メソッドを記述する。
定義
MenuInflater.inflate(menuRes: Int, menu: Menu!): Unit
// パラメータ
// menuRes: メニューのレイアウトファイル名(R値)
// menu: インフレートを行うメニュー
サンプルコード
class MainActivity: AppCompatActivity() {
// 定義したオプションメニューの表示
// onCreateOptionsMenu(menu:): アクティビティ開始時に呼び出されるメソッド
// menu: Itemを保持するオプションメニュー
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
// レイアウトファイルのインフレート
menuInflater.inflate(R.menu.<XMLファイル名>, menu)
// onCreateOptionsMenu()のオーバーライド時は、常にtrueを返却
return true
}
}
インフレート(inflate)
.xml
ファイルに記述したビュー
をJavaオブジェクト
として実体化
すること。
オプションメニューのアイテム選択時の処理
オプションメニューのアイテム
は、既定でリスナ
として定義されているため、
アイテム
選択時に呼び出されるonOptionsItemSelected()
メソッドを用いて、
選択されたアイテム
に応じた分岐処理(イベントハンドラ
)を実装する。
※アイテム
が選択されない場合は、super.onOptionsItemSelected()
の返り値(=false
)を返却する必要がある。
サンプルコード
class MainActivity: AppCompatActivity() {
// オプションメニューItemの"タップ"イベント検知時の処理
// onOptionsItemSelected(item:): オプションメニューのItemがタップされた場合に呼び出されるメソッド
// item: タップされたItem
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// 最終的に返却するBool値(初期値: true)
var returnVal: Boolean = true
// タップされたItemに応じた分岐処理
// MenuItem.itemId: ItemのID(R値)
when(item.itemId) {
R.id.<レイアウトファイルで定義したID> ->
// Itemタップ時の処理
...
R.id.<レイアウトファイルで定義したID> ->
// Itemタップ時の処理
...
else ->
// オプションメニューのItem以外が選択された場合は、
// 親クラス(super)のonOptionsItemSelected(item:)メソッドの
// 返り値(デフォルトではfalse)を返却
returnVal = super.onOptionsItemSelected(item)
}
...
// 最終的にBool値を返却
// -> アイテムが選択され、正常に処理を行った場合はtrueを返却
return returnVal
}
}
アクションバーへの「戻る」ボタン(←)の実装
参考: ActionBar
アクションバー
を表すNullable
型のsupportActionBar
プロパティの、setDisplayHomeAsUpEnabled()
メソッドを、引数をtrue
にして呼び出す。
なお、「戻る」ボタンのR値
は、android.R.id.home
で表される。
定義
ActionBar.setDisplayHomeAsUpEnabled(showHomeAsUp: Boolean): Unit
// パラメータ
// showHomeAsUp: 1つ階層が上のアクティビティに戻る「←」ボタンの表示有無
// true: 表示
// false: 非表示
サンプルコード
class MenuThanksActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
// アクションバー内に「戻る」ボタン(←)を表示
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
var returnVal: Boolean = true
if (item.itemId == android.R.id.home) {
finish()
}
else {
returnVal = super.onOptionsItemSelected(item)
}
return returnVal
}