Android soft Клавиатура не открыта в webView`
I m Использование WebView в AlertDialog для аутентификации пользователя в твиттере.
но когда я нажимаю на поле в webview, клавиатура Android не открывается.
вот мой код, который показывает, как я добавил веб-просмотр в диалоговом окне предупреждения.
я неявно вызываю клавиатуру Android, но открываю клавиатуру за диалогом предупреждений.
вот мой код.
public static void webViewDialog(final String authorizationURL, final int type)
{
final boolean correctPin;
System.out.println("In webViewDialog");
container = new LinearLayout(context);
container.setOrientation(LinearLayout.VERTICAL);
container.setMinimumWidth(200);
container.setMinimumHeight(320);
webView = new WebView(context);
webView.setMinimumWidth(200);
webView.requestFocusFromTouch();
webView.setMinimumHeight(380);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new TwitterWebViewClient());
webView.loadUrl(authorizationURL);
webView.setBackgroundColor(0xFFbbd7e9);
container.addView(webView);
Builder webDialog = new AlertDialog.Builder(context);
webDialog.setView(container).setTitle("Twitter Login")
.setPositiveButton("Ok", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
if (type == 0)
{
twitterPinCodeDialog();
dialog.dismiss();
}
}
}).show();
showVirtualKeyboard();
}
public static void showVirtualKeyboard()
{
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
InputMethodManager m = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
if(m != null)
{
// m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT);
}
}
}, 100);
}
Ответы
Ответ 1
Вот мое решение этой проблемы:
Поместите фиктивный текст редактирования и установите его видимость на GONE
и добавьте его в содержащий LinearLayout после добавления WebView в макет.
Пример:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LinearLayout wrapper = new LinearLayout(this);
WebView webView = new WebView(this);
EditText keyboardHack = new EditText(this);
keyboardHack.setVisibility(View.GONE);
webView.loadUrl(url);
wrapper.setOrientation(LinearLayout.VERTICAL);
wrapper.addView(webView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
wrapper.addView(keyboardHack, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
builder.setView(wrapper);
builder.create().show();
Как только это будет сделано, все должно работать правильно, и когда вы выбираете элемент в WebView, клавиатура выглядит как ожидалось.
Ответ 2
Я использую PopupWindow с WebView внутри него и испытываю ту же проблему, но если я установил focusable true в родительском, проблема исчезнет:
popupWindow.setFocusable(true);
Надеюсь, это поможет!
Ответ 3
У меня была аналогичная проблема и она была решена таким образом:
-
Я переопределяю метод onCreateView() на фрагменте диалога и определяю конфигурацию всех элементов представления для своего веб-представления.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.webview, container, false);
// do some config
// some other stuffs
loginpage.loadUrl(url);
return view;
}
-
В методе onCreateDialog() я просто добавляю их.
@Override
public Dialog onCreateDialog(Bundle savedInstaceState) {
Dialog dialog = super.onCreateDialog(savedInstaceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
В моем случае я хотел показать диалог без заголовка. Поэтому, поскольку DialogBuilder позаботится о создании диалогового окна, я решил переопределить onCreateView() и просто вызвать super.onCreateDialog() и добавить мою конфигурацию окна.
Ответ 4
Я также страдаю от этой проблемы, я решил эту проблему, настроив Dialog, вот мой код диалогового окна, надеюсь, что это будет полезно для вас.
TwitterDialog fb=new TwitterDialog(this);
fb.abc();
//fb.dismiss();
class TwitterDialog extends Dialog {
Context context;
String url="https://accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1<mpl=default<mplcache=2";
public TwitterDialog(Context context) {
super(context);
this.context=context;
}
void abc(){
LinearLayout mContent = new LinearLayout(context);
mContent.setOrientation(LinearLayout.VERTICAL);
final float scale = context.getResources().getDisplayMetrics().density;
float[] dimensions =new float[]{400.0f,500.0f};
addContentView(mContent, new FrameLayout.LayoutParams(
(int) (dimensions[0] * scale + 0.5f),
(int) (dimensions[1] * scale + 0.5f)));
FrameLayout.LayoutParams FILL =
new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);
WebView mWebView = new WebView(context);
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.setWebViewClient(new WebClicent());
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(url);
mWebView.setLayoutParams(FILL);
mContent.addView(mWebView);
TwitterDialog.this.show();
}
class WebClicent extends WebViewClient{
@Override
public void onLoadResource(WebView view, String url) {
System.out.println("onLoadResource "+url);
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
System.out.println("onPageFinished "+url);
//TwitterDialog.this.dismiss();
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
System.out.println("onPageStarted "+url);
super.onPageStarted(view, url, favicon);
}
}
}//TWitterDialog
Ответ 5
Причина, по которой ваша клавиатура может не отображаться, вероятно, связана с тем, что вы используете устройство, у которого уже есть жесткая клавиатура. ЛЮБОЕ УСТРОЙСТВО С ФИЗИЧЕСКОЙ КЛАВИАТУРЕЙ не нужно показывать мягкую клавиатуру... Вот почему она не отображается. Поскольку ваше устройство или ваш эмулятор имеют физическую жесткую клавиатуру.