teclado studio ocultar desplazamiento barra adjustresize android webview

android - studio - Al tocar el campo de formulario en WebView no se muestra el teclado virtual



barra de desplazamiento en android (5)

De acuerdo 10% con la respuesta de Dv_MH. Sin embargo, la clase adjunta fue un poco excesiva. Todo lo que tenía que hacer era extender WebView y devolver verdadero para onCheckIsTextEditor ()

import android.content.Context; import android.util.AttributeSet; import android.webkit.WebView; public class LiveWebView extends WebView { public LiveWebView(Context context) { super(context); } public LiveWebView(Context context, AttributeSet attrs) { super(context, attrs); } public LiveWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onCheckIsTextEditor() { return true; } }

A partir de ahí, pude usarlo como una WebView normal (incluso en Diálogos).

Alternativamente, con menos código:

WebView web = new WebView(context) { @Override public boolean onCheckIsTextEditor() { return true; } };

Creé mi propia WebView y establecí los objetos WebChromeClient y WebViewClient. Cuando inicio este WebView, los campos de formulario HTML reaccionan cuando los toco (aparece un cursor), pero no se seleccionan ni se inicia el teclado virtual. Si uso la bola de seguimiento para elegir el formulario y lo presiono, el teclado aparece.

Traté de llamar a myWebview.requestFocusFromTouch() como se sugirió esta respuesta , pero devuelve falso y no ayuda.


http://code.google.com/p/android/issues/detail?id=7189

Aquí hay una solución en caso de que otros no estén claros.

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


La respuesta de AndroidChen no funcionó para mí, pero busqué en el enlace proporcionado ( http://code.google.com/p/android/issues/detail?id=7189 ) y encontré la siguiente clase, funciona perfectamente ( Android Froyo en HTC Bravo), no solo texto, sino también todos los botones, redirecciones, etc., todo funciona perfectamente: D

class LiveWebView extends WebView { Context mContext; public LiveWebView(Context context, String URL) { super(context); mContext = context; setWebViewClient(URL); } @Override public boolean onCheckIsTextEditor() { return true; } @SuppressLint("SetJavaScriptEnabled") boolean setWebViewClient(String URL) { setScrollBarStyle(SCROLLBARS_INSIDE_OVERLAY); setFocusable(true); setFocusableInTouchMode(true); requestFocus(View.FOCUS_DOWN); WebSettings webSettings = getSettings(); webSettings.setSavePassword(false); webSettings.setSaveFormData(false); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(false); webSettings.setUseWideViewPort(false); 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; } }); this.setWebViewClient(new WebViewClient() { ProgressDialog dialog = new ProgressDialog(mContext); @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { loadUrl(url); return true; } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(mContext, "Oh no! " + description, Toast.LENGTH_SHORT).show(); } public void onPageStarted(WebView view, String url, Bitmap favicon) { if (dialog != null) { dialog.setMessage("Loading..."); dialog.setIndeterminate(true); dialog.setCancelable(true); dialog.show(); } } public void onPageFinished(WebView view, String url) { if (dialog != null) { dialog.cancel(); } } }); this.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { // Activities and WebViews measure progress with different scales. // The progress meter will automatically disappear when we reach 100% } @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { result.confirm(); return true; } }); loadUrl(URL); return true; } }

y luego para crear una vista web dentro de un diálogo, escribí este código

AlertDialog.Builder alert = new AlertDialog.Builder(M_PaymentOptions.this); alert.setNegativeButton("Back to Payment Options", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) {} }); alert.setTitle("BarclayCard Payment"); LiveWebView liveWevViewObject = new LiveWebView(M_PaymentOptions.this, redirecturl); alert.setView(liveWevViewObject); alert.show();


IMPORTANTE : pasé horas buscando esto y lo resolví asegurándome de que el diseño principal que extiende "ViewGroup" no tenga propiedad

android: descenddantFocusability = "blocksDescendants" que evita que el diseño infantil se concentre

O agregue Android: enfocable = "verdadero" a la vista web


Solo agrega EditText invisible en WebView

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" /> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"/>

Todas estas soluciones relacionadas con el enfoque no funcionaron en mi Samsung Note 3 / Android 5.0