Intereting Posts
Проверка наличия столбца в базе данных приложений на Android Grade Plugin 3-alpha1 outputFile вызывает ошибку Замена фрагмента на другой фрагмент внутри группы действий Как разделить строку по перерыву? AndroidManifest.xml для Gradle instrumentTest Android – ClassCastException – на LayoutParams от LinearLayout до AbsListView «Вы не можете установить это приложение, потому что другой пользователь уже установил несовместимую версию на этом устройстве» Разделение больших классов на внутренние классы в Java Android-тесты с Jenkins на безголовой машине Выберите подмножество символов во многих строках (выбор столбцов) в Eclipse / Android Studio Загрузить изображение из нового приложения Google+ (плюс) Android добавляет дополнительную скину как отдельный APK Темный текст на темном фоне в AlertDialog с Theme.Sherlock.Light Тест Robolectric Unit не работает с обновлениями для Android Studio 2.3 Оптическое распознавание символов Android с OpenCV

WebView textarea не открывает клавиатуру

Когда я показываю WebView , я не вижу, как появляется мягкая клавиатура. Жесткая клавиатура тоже не работает!

Каковы обычные недостатки.

Код, который я использую для доступа к WebView :

 package com.example.blahblah; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; import android.util.Log; import android.view.KeyEvent; import android.view.Window; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class createAccount extends Activity { private static final String LOG_TAG = "Create Account"; private WebView mWebView; private static final String URL = blah_app.urlSelected+"createAccount.html"; private Handler mHandler = new Handler(); @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); Toast.makeText(createAccount.this, "URL = " +URL, Toast.LENGTH_SHORT).show(); getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.webview); getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setSavePassword(true); webSettings.setSaveFormData(true); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(true); final Activity activity = this; mWebView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { activity.setProgress(progress * 1000); } }); mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); mWebView.clearCache(true); setProgressBarVisibility(true); mWebView.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); } @Override public void onPageFinished(WebView view, String url) { mWebView.loadUrl("javascript:(function () { " + "setVariables("+blah_app.numberSelected+",'"+blah_app.urlSelected+"');" + "})()"); } }); mWebView.loadUrl(URL); } final class DemoJavaScriptInterface { public void setData(String fname, String lname, String gacct, String phone) { SharedPreferences prefCreateAccount = PreferenceManager.getDefaultSharedPreferences(createAccount.this); SharedPreferences.Editor editor = prefCreateAccount.edit(); editor.putString("FirstName", fname); editor.putString("LastName", lname); editor.putString("GmailAcct", gacct); editor.putString("Phone", phone); editor.commit(); } DemoJavaScriptInterface() { } /** * This is not called on the UI thread. Post a runnable to invoke * loadUrl on the UI thread. */ public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { mWebView.loadUrl("javascript:wave()"); } }); } } /** * Provides a hook for calling "alert" from javascript. Useful for * debugging your javascript. */ final class MyWebChromeClient extends WebChromeClient { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { Log.d(LOG_TAG, message); result.confirm(); return true; } } public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { startActivity(new Intent(getApplication(), blah_app.class)); return true; } return super.onKeyDown(keyCode, event); } } 

Solutions Collecting From Web of "WebView textarea не открывает клавиатуру"

Полное решение – это нечто большее, чем у Саны. Он зарегистрирован как ошибка на сайте Android ( http://code.google.com/p/android/issues/detail?id=7189 ):

 webView.requestFocus(View.FOCUS_DOWN); webView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_UP: if (!v.hasFocus()) { v.requestFocus(); } break; } return false; } }); 

Проблема заключалась в том, что веб-просмотр не фокусировался, когда он был загружен, поэтому используя

 webView.requestFocus(View.FOCUS_DOWN); 

Решил проблему.

Я удивлен, что даже на Android 4.1 (тестируется на SGS3) проблема все еще присутствует, и переопределение onTouch () не решает ее для меня.

Тестовый код:

 String HTML = "<html><head>TEST</head><body><form>"; HTML += "<INPUT TYPE=TEXT SIZE=40 NAME=user value=\"your name\">"; HTML += "</form></body></html>"; WebView wv = new WebView(getContext()); wv.loadData(HTML, "text/html", null); final AlertDialog.Builder adb = new AlertDialog.Builder(getContext()); adb.setTitle("TEST").setView(wv).show(); 

Мое сложное решение заменяет WebView на MyWebView:

 private static class MyWebView extends WebView { public MyWebView(Context context) { super(context); } // Note this! @Override public boolean onCheckIsTextEditor() { return true; } @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_UP: if (!hasFocus()) requestFocus(); break; } return super.onTouchEvent(ev); } } 

Один ответ и работает хорошо

 // define webview for browser wb = (WebView) findViewById(R.id.webView1); wb.requestFocusFromTouch(); 

Где wb – мой объект webView

Для тех из вас, кто ищет решение, когда WebView находится в AlertDialog , ответ здесь решил эту проблему для меня: Показать мягкую клавиатуру в AlertDialog с помощью WebView внутри (Android)

Если бы одна и та же проблема и не все вышеперечисленные решения работали. Это было для меня

  <CustomWebView android:id="@+id/webView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:focusable="true" android:focusableInTouchMode="true" /> 

У меня была такая же проблема с Jelly Bean, но ни один из вышеперечисленных решений не работал для меня. Это решение работало для меня на JellyBean

 WebView webView = new WebView(getActivity(), null, android.R.attr.webViewStyle); 

Иногда параметр android.R.attr.webViewStyle не применяется по умолчанию. Это гарантирует, что стиль всегда применяется.

У меня была аналогичная проблема … и позже я обнаружил, что текстовое поле на веб-странице, показанное в моем веб-представлении, отключено.

Проверьте это, если страница имеет одинаковую проблему в браузере?

У меня была такая же проблема, ни одна из вышеперечисленных решений не работала для меня. После долгих попыток я наконец нашел проблему.

Некоторые из различных веб-страниц, которые я выполнял с помощью WebView, не соответствовали должным образом в веб-представлении, и в результате div (или какой-либо другой компонент html) невидимо лежал над полями ввода. Хотя поля ввода были выбраны при касании, они не позволяли вводить текст (даже если мне удалось получить мягкую клавиатуру с помощью шара трека).

Итак, решение.

 WebView.getSettings().setUseWideViewPort(true); 

Это не полностью остановит проблему, но делает ее более похожей на компьютерный браузер, для которого предназначены сайты. Меньшая смена наложения.

Надеюсь, это вам поможет.

Попробуйте это -> первое имя – это имя поля и убедитесь, что он не имеет атрибута автофокуса.

  mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { mWebView.loadUrl("javascript:document.getElementById(\"firstname\").focus();"); } });