素人のアンドロイドアプリ開発日記

アンドロイドアプリでクリックイベントを取得

2011.02.09

クリックイベントの取得ですが、implementsで設定する場合などいろいろありまして、以前この記事を書いた当時だと、implementsで書いていた部分がありましたので、2018年に記事をリライトしました。

今2018年追加の記事

クリックのイベントをつける場合には、

findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View view) {
      
   }
});

をすればカンタンにイベントがつけられて、押された場合の処理も書く事ができます。

クリックイベントを発火する対象はコンテナにつかってるLinearLayoutとかでも問題なく実装できますが、クリックリスナーをつけると、

setClickable(true)

を同時に付与する形になります。(逆に反応しない場合にはこの関数を付与するとクリックできたりしますが)

簡易的に実装できるので、レイヤーのVISIVBLEをクリックで変更したりする場合にみえないのにclickableが効いてしまって後ろの要素にタッチできない場合が結構あります。みえなくなる場合には

setClickable(false)

を記載しておくとよいと思います。

このクリックについては、連打の対応を何かしら実装する必要が出てくる事も多いのでいろいろ試しながら実装してみてください

 

昔の記事

 

androidアプリで、ボタンのクリックをしてみます。

実装には、まずimplemenetsでOnClickListenerを実装する必要があります。

継承と似た形になりますが、

public class ButtonClick extends Activity implements OnClickListener

と言った形になります。

 

ここで注意が必要ですが、OnClickListenerに関しては

android.view.View.OnClickListener
android.content.DialogInterface.OnClickListener

の2種類がありますが、今回は上のを利用します。

eclipseの補完で両方でてきてしまいますが、上のviewの配下にある方を利用しましょう。

 

上記のOnClickListenerをimplemenetsする事で、クリックされた時のイベントハンドルを設定する必要があります。

名前も決まっていて

public void onClick(View v){}

と言うファンクションを設定します。

 

また、全体のレイアウトに関しては、main.xmlをして構築していきます。

最初にmain.xmlを見ると、TextViewが入っていますが、これは一度削除します。

 

中にLinearLayoutと言うのがあると思いますが、これはオブジェクトを配置するのに

使うので、そのまま利用します。

 

LinearLayoutの中にButtonのファイルを入れます。

【id】に関しては好きな名前で結構ですが、@+id/button01と言う形式で頭に@+id/とつける必要があります。

 

下記のようになります。

//main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
 <Button 
 android:text="Button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:id="@+id/button01">
 </Button>
</LinearLayout>

と言う形になります。

 

このレイアウトされたものを配置するには下記です。

setContentView(R.layout.main);

 

package in.andante.android.buttonclick;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ButtonClick extends Activity implements OnClickListener {
    /** Called when the activity is first created. */

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    //@Override(4~はけす)
    public void onClick(View v){

    }

}

 

で、もしボタンをクリックしたら、ボタンに書いてある文字を変更するようにするには、

btnをpublicでclass配下にpublicでおいて、idでR.idからひっぱってこれるので、

下記のような形になる。

 

package in.andante.android.buttonclick;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ButtonClick extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    private Button btn;

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button)findViewById(R.id.button01);
        btn.setText("please,click");
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v){
    	if(v == btn){
    		btn.setText("thank you");
    	}
    }

}

 

click

※上クリック前、下クリック後

 

12.05.10 追記

コメントで、いただいていたのですが、onClickの前にある@Overrideに関してなんですが、アプリのバージョンを新しいもの(4~)で作ろうとするとエラーを吐きます。

消せばいいのですが、以前だと、eclipseで勝手に付けてきたんですよね。紛らわしくてすいません-

 

fin

同じカテゴリの記事を紹介します

流れる背景を作るステータスバーの色を好きな色にするカメラの権限の取得をするpush通知の実装を確認をする為に、phpを書くしかないListView GridViewに下部にマージンをあけたい時よくつかうメモListViewの設定split で ドット文字列を、bitmapにするクラスを作ってみた。uriから画像の回転角度を取得するgridviewとlistviewで表示にalphaanimationを使ったら動かないのが存在する問題自分で変数を持つクラスを作ってコピーした時に参照まで渡してしまう問題でかい画像が表示されない。という問題interfaceをandroidで使ってみるフルスクリーンでナビゲーションバーまで消せるパソコンを買ったらする事点滅をさせるスクリプトJsonObjectを扱う時のtry catchが邪魔なのでシンプルにする2chのまとめアプリは気を付けろArrayAdapterの使い方setTimeOutを作るarraylistを並び替えAndroidの勉強で気を付けるべき6つの事staticで変数を持ちまわす時Androidで定規を作る時にサイズを確認してみる。TextureViewがゴミから神になった日ListViewの位置を変更しないで更新する方法animationをxmlで設定するのはアホなようだ。listを作るのがめんどい件について矩形の中の点の存在条件についてScrollViewのScrollToが効かない時Twitterのアプリを暗黙的Intentで狙いうちの巻勉強した内容をクラスにしてみてるText三角形の座標の包括判定をプログラムで実装前回作ったeasingを使って、translateアニメーションにイージングをかける。AndroidのデフォルトのアニメーションがダサいのでEasingをJavascriptから持ってきたmatrixを使って、回転をさせる時に中心点をずらす方法destoryとかで割と実行してるメモリリーク対策AnimationDrawable 動かないTextViewをセンター寄せにする。特定のアプリがインストールされているかを判別する方法surfacevierをaddviewすると、一瞬画面が点滅する件アニメーションで高さを変更listviewで押すとデフォルトで背景に色がつくのを抑止するline-heightをアンドロイドのtextviewで設定をする。listviewの区切り線を消すframelayoutだとmarginが効かない@android2.2アンドロイドのimageviewで背景が透けるという糞仕様を発見ウインドウのサイズを取得する方法decodeResourceは劣化する上に糞遅い。decodeResourceは劣化します。もう一度言います。decodeResourceは劣化します。

カテゴリー:androidアプリTips

公開中のアプリ、是非ダウンロードしてみてください

2chまとめのたね

RSSを利用してさまざまなブログの情報をキュレーションしてくれるアプリ

インストールする

ひらがな戦記

OPENGL ES2 を利用したカルタのソーシャルゲーム

インストールする