Android Studio でボタンを押した時に動きをつけたい
という方に向けた記事になります。
ここでいうボタンとは、「プッシュボタン」のことを指します。Webサイト等でお買い物をする時に押すようなボタンのことですね。
前回の記事でボタンの画面表示(レイアウト)の実装について解説しました。ボタンの作成方法から知りたいという方はこちらを参照ください。
本記事ではボタンを押した時の動きの実装の解説となります。ボタンを押すと、ボタンの文字が変わる!という実装例を用いて見ていきます。
ボタンの作成
ボタンを押した時の動きを実装する前に、押すボタンを準備しておきましょう。
真ん中の水色のボタンを押すとボタンの文字列が「click!」→「clicked」に変わるというアプリを作成していきます。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/description" android:paddingBottom="5dp" /> <Button android:id="@+id/button01" android:layout_width="100dp" android:layout_height="60dp" android:background="@drawable/button1" android:text="@string/button_click" android:textColor="@color/white" app:backgroundTint="@null" android:layout_marginTop="10dp"/> </LinearLayout>
ボタンを押した時の動き(クリックイベント)の実装
ボタンが作成できたら、ボタンを押した時の動きを実装していきます。
以下の3つの方法を用いて実装可能です。どれを使用しても大丈夫ですが、慣れるためにもどの方法でも実装できるようになっておきましょう。
①On ClickLisner(匿名クラス)
②On ClickLisner(インタフェースの実装)
③android:onClick(ボタンの属性)
一つずつ見ていきます。
On ClickLisner(匿名クラス)
1番無難な実装方法かと思います。簡単に実装できますが、ボタンの数が増えてくると可読性に影響が出てきます。
実装方法は以下の通り。
まずは作成したボタンをjavaプログラムで使用するために以下のコードを追加します。(画面の遷移等考えていない場合は「MainActivity.java」に追加するといいです。)
Button button1 = findViewById(R.id.button01);
ざっくりと解説すると、レイアウトファイル(R)より、idが「button01」のものを見つけてくる、というようなコードになります。(見つけてきたボタンにjavaプログラムで使用する用の名前をつけたということです。)
次に、作成したボタンをクリックした時の動きを追加します。
少し長いので補完機能を使用しましょう。書いている途中で選択肢が出てくるのでそれを選択してエンターキーを押すと自動入力されます。
button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //ここにボタンを押した時に実行したい処理を記述する } });
最後に、OnClickメソッドの中に処理を記述して、終了。
最終的なソースコードは以下のようになります。
package com.example.hyomolution_sample05; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = findViewById(R.id.button01); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { button1.setText("clicked"); } }); } }
On ClickLisner(インタフェースの実装)
ボタンを押した場合の処理をまとめることができるので、ボタンの数が多い場合に有効な実装方法です。
まずは「View.OnClickListener」インタフェースをimplementします。(先ほどと同様、画面の遷移等考えていない場合は「MainActivity.java」に追加するといいです。)
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
次に、先ほど同様、作成したボタンをjavaプログラムで使用するために以下のコードを追加します。
Button button1 = findViewById(R.id.button01);
次に、作成したボタンをクリックした時の動きを追加します。
button1.setOnClickListener(this); public void onClick(View v) { //ここにボタンを押した時に実行したい処理を記述する }
匿名クラスの実装と異なるのは、「ボタンが押された場合の処理の呼び出し→行う処理」といったように処理を分けることができる点にあります。
同様の処理はメソッド単位でまとめる、という実装が可能になるので、ボタンが複数ある場合はこちらの書き方をおすすめします。
最後に、OnClickメソッドの中に処理を記述して、終了。
最終的なソースコードは以下のようになります。
package com.example.hyomolution_sample06; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener { Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = findViewById(R.id.button01); button1.setOnClickListener(this); } @Override public void onClick(View v) { button1.setText("clicked"); } }
android:onClick(ボタンの属性)
ClickLisnerを使用せずに実装する方法です。
ボタンのレイアウト(activity_main.xml)に属性「onClick」を追加します。
<Button android:id="@+id/button01" android:layout_width="100dp" android:layout_height="60dp" android:background="@drawable/button1" android:text="@string/button_click" android:textColor="@color/white" app:backgroundTint="@null" android:layout_marginTop="10dp" android:onClick=“clicked” />
次に、作成したボタンをクリックした時の動きを追加します。メソッド名は先ほどの属性で指定した名前にしてください。
public void clicked(View v) { //ここにボタンを押した時に実行したい処理を記述する }
最後に、OnClickメソッドの中に処理を記述して、終了。
最終的なソースコードは以下のようになります。
package com.example.hyomolution_sample07; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void clicked(View v) { Button button = findViewById(R.id.button01); button.setText("clicked"); } }
まとめ
Android Studio でボタンを押した時の動きの実装について解説しました。動きをつけることができるようになると、アプリ開発が楽しくなってくるのではないでしょうか。
Androidアプリ開発は難易度が高めですが、少しずつできることを増やしていきましょう。