问题
In my Android app I create an AlertDialog
that has a WebView
inside. The WebView
loads a webpage that requires the user to log in. However, when I click on text fields in the WebView
, soft keyboard does not appear. I am aware of the issue in general (Android: Issue 7189); however, in my case the suggested solution does not seem to work since I use an external website, and not just a simple HTML form.
The perfect solution would be if the keyboard appeared when the user clicked on the website's text fields. However, having the keyboard appear together with theAlertDialog
would also work. Any ideas?
回答1:
It seems that the best solution is to simply create a custom dialog. Custom dialogs do not appear to have the soft keyboard bug at all (it shows up exactly when it has to). Here's some basic code:
Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON);
dialog.setContentView(R.layout.dialog);
dialog.setTitle("My great title");
dialog.setCancelable(true);
dialog.show();
dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.icon);
WebView vw = (WebView) dialog.findViewById(R.id.wv);
回答2:
There much better solution (with AlertDialog).
Extend WebView class.
public static class LocalWebView extends WebView { public LocalWebView(Context context) { super(context); } public LocalWebView(Context context, AttributeSet attrs) { super(context, attrs); } public LocalWebView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public LocalWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } public LocalWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) { super(context, attrs, defStyleAttr, privateBrowsing); } @Override public boolean onCheckIsTextEditor() { return true; } }
Use this LocalWebView instead of origin WebView in layout that you set to AlertDialog as content view.
回答3:
If it's still relevant, for me the problem was related to an immersive dialog + webview.
I've override the dialog show method to achieve immersive by setting a flag - NOT FOCUS on the dialog window, once I removed it I lost the immersivnes but now my web dialog pops uo the keyboard...
来源:https://stackoverflow.com/questions/5563957/show-soft-keyboard-in-alertdialog-with-a-webview-inside-android