ユーザーがもう一度クリックすると、Android キーボードが数値タイプからデフォルトのアルファに変更されるという問題があります。ウェブビューでキーボードのデフォルトのタイプを英字から数字に変更できないといういくつかの投稿を読んだ後、以下の手順に従いました。非表示の EditText コントロールを作成し、そのコントロールからキーボードの種類を変更しましたが、正常に機能しました。数値 SIP を取得し、すべてのキーの押下が正しく webview にディスパッチされます。しかし問題は、ユーザーが webview で再度タッチすると、InputMethodService によってキーボードの種類が数値からアルファに変更され、このイベントのコールバックを受信しないことです。
V/InputMethodService( 1764): CALL: onStartInput
以下の可能な解決策を考えることができますが、どれもうまくいかないようです。
1.webview で InputMethodManager を使用してデフォルトのキーボード タイプを変更する方法はありますか?
2.数値キーボードが既に表示されている場合、ユーザーが再度タッチしたときに InputMethodManager がデフォルトのアルファベット キーボードに変更されるのを防ぐことはできますか?
3.InputMethodService の onStartInput() メソッドのコールバックをオーバーライドまたは受信する方法はありますか?
InputMethodManager imm;
if (mWebEditText == null)
{
mWebEditText = new WebEditText(Common.mainActivity.getApplicationContext(),view.getView());
}
mWebEditText.setInputType(InputType.TYPE_CLASS_NUMBER);
webEditTextPanel.addView(mWebEditText, lp);
mWebEditText.setVisibility(View.VISIBLE);
mWebEditText.requestFocus();
imm.showSoftInput(mWebEditText, 0);
WebEditText クラス:
public class WebEditText extends EditText
{
//Pointer to the web view to dispatch the keys
View mWebView;
public WebEditText(Context context, View view)
{
super(context);
mWebView = view;
}
/**
* Override the dispatch key event to send the key events to the web view
* from the invisible Edit Text control
*/
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
mWebView.dispatchKeyEvent(event);
return super.dispatchKeyEvent(event);
}