Android 防止InputMethodService在用户第二次触摸webview时将数字键盘更改为Alpha

Android 防止InputMethodService在用户第二次触摸webview时将数字键盘更改为Alpha,android,webview,focus,touch,android-input-method,Android,Webview,Focus,Touch,Android Input Method,当用户再次单击时,Android键盘从数字类型更改为默认Alpha时,我遇到了一个问题。在阅读了几篇关于不能在webview上将默认键盘类型从字母改为数字的文章后,我遵循了以下步骤。我已经创建了一个隐藏的EditText控件,并更改了该控件的键盘类型,效果很好,现在我得到了数字SIP,所有按键都被正确地分配到webview。但问题是,如果用户再次触摸webview,InputMethodService会将键盘类型从数字更改为字母,并且我不会收到此事件的任何回调 V/InputMethodServ

当用户再次单击时,Android键盘从数字类型更改为默认Alpha时,我遇到了一个问题。在阅读了几篇关于不能在webview上将默认键盘类型从字母改为数字的文章后,我遵循了以下步骤。我已经创建了一个隐藏的EditText控件,并更改了该控件的键盘类型,效果很好,现在我得到了数字SIP,所有按键都被正确地分配到webview。但问题是,如果用户再次触摸webview,InputMethodService会将键盘类型从数字更改为字母,并且我不会收到此事件的任何回调

V/InputMethodService( 1764): CALL: onStartInput
我能想到以下几种可能的解决办法,但似乎都不管用

1.是否有办法通过网络视图上的InputMethodManager更改默认键盘类型

2.如果已显示数字键盘,那么我们是否可以防止用户再次触摸时InputMethodManager更改为默认alpha键盘

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);       
}

您可以从webview中显示的HTML代码中执行此操作。将编辑文本(文本框)的输入类型更改为数字

 <input type="number" placeholder="Text box lable" id="Text box id" required value="defautvalue" />

你能用我的方法添加编辑文本吗。它在我的应用程序中运行良好

你也可以共享webview的内容吗?嗨..有问题吗?EditText(textbox)是一个隐藏字段,HTML代码看不到。我在用户单击webview中的任何输入控件(type=number)时创建此EditText。因此,您是从代码创建EditText并将其添加到webview?更改ans,请选中抱歉,我也在这样做,对吗?我找不到这两者之间的区别,请你详细说明一下我的不同之处。我已经用WebEditText类定义更新了我的问题。您正在围绕原始EditText制作包装器,因此当您用其他类扩展它时,它有自己的内存堆栈要运行。所以,当用户触摸编辑框时,它会执行代码,将其显示为数字键盘,但之后它会将其视为正常的webview,因此问题开始出现。
EditText e = new EditText(getApplicationContext());
            e.setInputType(InputType.TYPE_CLASS_NUMBER);
            appView.addView(e);