ソフトウェアキーボードの表示

2,118 views
Skip to first unread message

egg

unread,
Aug 31, 2009, 7:19:55 PM8/31/09
to android-g...@googlegroups.com
江川です。
表題の件についてご存知の方がいらっしゃいましたらご教示ください。
例えば、ひとつのEditTextのみを持ったアクティビティがあるとします。
ex)
EditText et = new EditText(this);
setContentView(et);
このアクティビティを表示したときに、利用者がEditTextをタップしなくても
あらかじめソフトウェアキーボードが出ているようにしたいです。
et.requestFocus();
をしても出来なかったので、現状は
Message m = Message.obtain(handler,
new Runnable() {
@Override
public void run() {
InputMethodManager manager =
(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
manager.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
}
});
・・・
handler.sendMessageDelayed(m, 150);
のようなことをしています。
これで一応出来ていそうなのですが、もっといい方法がありそうな気がしています。。。

ご存知の方がいらっしゃいましたら、御教示頂けると嬉しいです。

よろしくお願いいたします。

------------------------------------------
EGAWA Takashi

Keiji Ariyama

unread,
Aug 31, 2009, 9:22:26 PM8/31/09
to android-g...@googlegroups.com
有山@大阪です。

 これは僕も気になってます。そして、美しい解法は見つけていません。

 最初はrequestFocusで大丈夫と思ったのですけど、どうやら画面表示が完了し
た後にフォーカスが当たらないとキーボードが表示されないらしいです。

 江川さんのコードでは画面の構築を待つ為、150msの遅延でメッセージを送信
していますが、僕の場合は200msにしています。

 この遅延を設定しなければならないのが、たまらなく美しくないです(少なく
とも、1msの遅延では画面の構築は完了しません)。

 画面表示の後に発生するイベントが何かあれば良いのですが……onPostResume()
でも駄目でした。

 ご存知の方がおられましたら、僕にも教えて下さい。

/*********************************************
有限会社シーリス
代表 有山 圭二
@Address
〒530-0044
大阪市北区東天満二丁目2番5号
第2新興ビル 601
@Web http://www.c-lis.co.jp
*********************************************/

EGAWA Takashi

unread,
Aug 31, 2009, 9:55:19 PM8/31/09
to android-g...@googlegroups.com
江川です。ありがとうございます。
有山さんのメールを拝見してonWindowFocusChangedで実装してみました。
こんな感じにすると遅延は消すことができました。
InputMethodManagerを使わなければならない点は変わらないので、
相変わらず少しださいですが。。

public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus && et == getCurrentFocus()) {
Message m = Message.obtain(handler, new Runnable() {
@Override
public void run() {
InputMethodManager manager = (InputMethodManager)
getSystemService(INPUT_METHOD_SERVICE);
manager.showSoftInput(contents, InputMethodManager.SHOW_IMPLICIT);
}
});
handler.sendMessage(m);
}
}


------------------------------------------
EGAWA Takashi



2009年9月1日10:22 に Keiji Ariyama<keiji_...@c-lis.co.jp> さんは書きました:

EGAWA Takashi

unread,
Aug 31, 2009, 9:58:02 PM8/31/09
to android-g...@googlegroups.com
まちがえました。

public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus && et == getCurrentFocus()) {
Message m = Message.obtain(handler, new Runnable() {
@Override
public void run() {
InputMethodManager manager = (InputMethodManager)
getSystemService(INPUT_METHOD_SERVICE);
manager.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
}
});
handler.sendMessage(m);
}
}

です。


------------------------------------------
EGAWA Takashi



2009年9月1日10:55 に EGAWA Takashi<e...@android-group.jp> さんは書きました:
>> 画面表示の後に発生するイベントが何かあれば良いのですが......onPostResume()

kabayan

unread,
Sep 1, 2009, 8:48:01 AM9/1/09
to 日本Androidの会
kabayanです。

このソフトキーボードはandroidキーボードの事ですよね?
iWnnやsimejiを入力方法にしていると、有無を言わさず出てしまいませんか?
逆に消せないかなと思っているところですがいい方法がわかりません。

他のアプリと動作が変わるのはどうかと思うのですが。
> > 2009年9月1日10:22 に Keiji Ariyama<keiji_ariy...@c-lis.co.jp> さんは書きました:
>
> >> 有山@大阪です。
>
> >> これは僕も気になってます。そして、美しい解法は見つけていません。
>
> >> 最初はrequestFocusで大丈夫と思ったのですけど、どうやら画面表示が完了し
> >> た後にフォーカスが当たらないとキーボードが表示されないらしいです。
>
> >> 江川さんのコードでは画面の構築を待つ為、150msの遅延でメッセージを送信
> >> していますが、僕の場合は200msにしています。
>
> >> この遅延を設定しなければならないのが、たまらなく美しくないです(少なく
> >> とも、1msの遅延では画面の構築は完了しません)。
>
> >> 画面表示の後に発生するイベントが何かあれば良いのですが......onPostResume()
> >> でも駄目でした。
>
> >> ご存知の方がおられましたら、僕にも教えて下さい。
>
> >> /*********************************************
> >> 有限会社シーリス
> >> 代表 有山 圭二
> >> @Address
> >> 〒530-0044
> >> 大阪市北区東天満二丁目2番5号
> >> 第2新興ビル 601
> >> @Webhttp://www.c-lis.co.jp

EGAWA Takashi

unread,
Sep 2, 2009, 3:01:09 AM9/2/09
to android-g...@googlegroups.com
kabayanさん

江川です。ありがとうございます。

> iWnnやsimejiを入力方法にしていると、有無を言わさず出てしまいませんか?

私のHT-03Aでは、Simejiを入力方法にしていても出てこないです。
先ほどこのようなコードで試してみましたが、やはり出てきませんでした。

public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final EditText e = new EditText(this);
setContentView(e);
}
}

出てきてしまう方が嬉しいのですが。。。

------------------------------------------
EGAWA Takashi



2009年9月1日21:48 に kabayan<tka...@gmail.com> さんは書きました:
Reply all
Reply to author
Forward
0 new messages