Taka blog

プログラミングとか

[AndroidStudio4]タイトルバーにボタンを追加し、ボタンにアクションを設定する方法

デフォで表示される画面上部のバーは、タイトルバー、アプリバー、アクションバーなど名称が統一されていない感がありますが、このブログでは「タイトルバー」でいこうと思います。

タイトルバーを表示する

アプリの作り方の記事でご紹介しましたが、theme.xmlを編集してタイトルバーを表示する/非表示にすることができます。

タイトルバーにボタンを追加する

f:id:masquerade0:20210817223647j:plain
bar(button押下前)
f:id:masquerade0:20210817223717j:plain
bar(button押下時)

res/menuフォルダ配下にxmlファイルを作成します。android:titleの文字またはandroid:iconの画像がタイトルバーに表示されるようになります。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/button_add"
        android:orderInCategory="1"
        android:title="add"
        android:icon="@android:drawable/ic_menu_add"/>
</menu>

次にMainActivityで上記のxmlを適用させるための設定をします。

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.titlebar, menu);
		return true;
	}
}

ここまでコーディングできたら、エミュレータ起動で動作確認してみてください。

タイトルバーのボタンにアクションを設定する

画面の操作に対して処理を割り当てる場合は、基本は○○Activity.javaに実装することになります。今回はMainActivityに以下の例をコピペしてください。

public boolean onMenuItemSelected(int featureId, MenuItem item) {
	switch(item.getItemId()) {
		case R.id.button_add:
			// button押下時の処理
			Toast.makeText(this, "selected", Toast.LENGTH_LONG).show();
			break;
		default:
			break;
	}
	return super.onMenuItemSelected(featureId, item);
}

タイトルバーのボタン押下時の処理は全てこのonMenuItemSelectedメソッドに追加していきます。caseにはタイトルバーのxml内で指定したidを選択します。こうすることで、xmlボタンと対応する処理を記述できます。

Toast.makeTextは、画面下部にトーストを表示するメソッドです。第2引数に表示したい文字列を指定します。

MainActivityですが、エラーが出る場合はextendsのAppCompatActivityをActivityに変更してください。

画面操作と処理 Androidアプリ開発時の進め方

AndroidStudioでアプリを開発していて、画面操作と処理の2つに整理すると、分かりやすいなと私は感じました。例えば今回の記事ではアプリバーのボタンを押下することが「画面操作」に当たります。これに対して、別画面への遷移や、ポップアップの表示、トーストの表示などが「処理」に該当します。

新しい機能を実装するときはそれを「画面操作」と「処理」に分類し、どちらかから順にコーディングしてエミュレータで確認しながら進めるのが良さそうです。

例として、あるボタンを長押ししたときに画面遷移させたいとします。そのときはまずボタン長押しという「画面操作」に対して、一旦トースト表示という簡単な「処理」を割り当てて動作確認する、という流れです。

まだまだ分からない部分は多いので、進め方について感じたことがあれば順次まとめたいなと思っています。