スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

  • Comments (Close): -
  • TrackBack (Close): -

キーイベントの取得

たとえばPCで検索をする場合、検索ボックスに検索ワードを入力して検索ボタンを押すことで検索が始まりますが、検索ボタンは押さずにEnterキーを押すことでも検索が可能です。

このPCでは当たり前の機能をAndroidでも実装しましょう。

Enterキーを押すというキー操作をイベントとするリスナは OnKeyListener です。キー操作でアプリを動かせるようにすることで、ユーザーにとって使いやすいアプリになります。

それでは、簡単な使い方から始めてOnKeyListenerの使い方をマスターしましょう。

まずレイアウトですが、基本的には EditTextを追加 のレイアウトを踏襲します。

<?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"
>
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/pleaseinput"
/>
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLength="50"
android:maxLines="1"
android:inputType="text">
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/buttonclick"
android:layout_gravity="center">
</Button>
</LinearLayout>


まったく同じでは能がないので、少し記述を付け加えました。

Enterキーを押したときにEditTextの高さが広がらないように、EditTextを単一行に設定します。

android:maxLines="1"

また、文字数の最大値は50とします。

android:maxLength="50"

さらに、検索ボックスタイプの一行だけのEditTextで改行ができては具合が悪いので、改行できなくします。

android:inputType="text"

改行できるようにするには、textではなくtextMultiLine を指定します。


<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">HelloAndroid</string>
<string name="pleaseinput">入力してください。</string>
<string name="buttonclick">Click</string>
</resources>



package sample.basic;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.view.View.OnKeyListener;
import android.view.View;
import android.view.KeyEvent;
import android.widget.TextView;

public class HelloAndroid extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

EditText editText1=(EditText)findViewById(R.id.editText1);
editText1.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
TextView textView1=(TextView)findViewById(R.id.textView1);
textView1.setText("入力が行われました。");
return false;
}
});
}
}


流れとしては、EditTextにリスナをセットしてコールバックメソッドとしてonKey()メソッドを定義します。

abstract boolean onKey(View v, int keyCode, KeyEvent event)

onKey()メソッドは、イベントを消費する場合、つまり一度しかイベントを呼び出せないようにする場合はtrue、そうでなければfalseとします。

それでは実行します。

20110914_1
入力してEnterを押すと・・・


20110914_3
TextViewが「入力が行われました。」と変わり、入力した文字が消えました。

入力した文字が消えたのは、改行が行われたためです。


入力アプリに適用


それでは、EditTextに入力した文字列をTextViewで表示するアプリケーションで、Enterキーからもコールバックできるようにしましょう。

package sample.basic;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.widget.EditText;
import android.view.View.OnKeyListener;
import android.view.KeyEvent;
import android.widget.TextView;

public class HelloAndroid extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
onEnter();
}
});

EditText editText1=(EditText)findViewById(R.id.editText1);
editText1.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN
&& keyCode == KeyEvent.KEYCODE_ENTER) {
onEnter();
return true;
}
return false;
}
});
}
public void onEnter(){
TextView textView1=(TextView)findViewById(R.id.textView1);
EditText editText1=(EditText)findViewById(R.id.editText1);
textView1.setText(editText1.getText().toString()+" と入力されました。");
}
}


ボタンのクリックとEnterキーの押下とで処理が共通するので、onEnter()というメソッドを作りました。

onKey()メソッドでは、KetEventが出てきます。

event.getAction() == KeyEvent.ACTION_DOWN

では、イベントを取得するタイミングをボタンが押下された時を指定しています。

keyCode == KeyEvent.KEYCODE_ENTER

では、Enterキーに対してイベントを設定しています。

実行します。

20110915_1
当初の画面


20110915_2

「歯ブラシ」と入力してEnterキーを押しました。

関連記事
スポンサーサイト

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

Comments:

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://androidhacker.blog94.fc2.com/tb.php/52-e47752bc
  • 閉じるボタン
レファレンス
月別アーカイブ
リンク
カテゴリ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。