Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Teclado suave de Android no abierto en webView`

Estoy usando WebView en AlertDialog para autenticar al usuario a twitter. Pero cuando hago clic en el campo en webview, el teclado android no abre. Aquí está mi código que muestra cómo he añadido webview en el diálogo de alerta. I implícitamente llamar al teclado de Android, pero abre el teclado detrás del diálogo de alerta.

Aquí está mi código.

  • Android: Pregunta sobre mapas de bits, uso de memoria y escala
  • Descarga automática de idioma de reconocimiento de voz fuera de línea en Android
  • Cómo borrar y configurar la aplicación de inicio predeterminada
  • El reproductor de video apaga el modo en Android usando appcompat-v7
  • Uso de BottomSheetBehavior con un CoordinatorLayout interno
  • ListView con un widget que se puede hacer clic / editar
  • 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); } 

  • ¿Hay una manera de tener una sección común con buildConfigField y resValue en gradle?
  • Android: onDestroy () o un método similar en la clase Application
  • Integración de android ndk ndk-gdb con emacs?
  • Tarjeta Emulate Mifare con Android 4.4
  • Tecla de hash de Facebook al usar el estudio de Android
  • Implementación de onScrollListener para detectar el final de desplazamiento en un ListView
  • 5 Solutions collect form web for “Teclado suave de Android no abierto en webView`”

    Aquí está mi solución a este problema:

    Poner un texto de edición de maniquí, y establecer su visibilidad a GONE , y añadirlo a un LinearLayout que contiene, después de agregar el WebView al diseño.

    Ejemplo:

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

    Una vez hecho esto, todo debería funcionar correctamente, y cuando se selecciona un elemento en el WebView, el teclado aparece como se esperaba.

    Estoy utilizando un PopupWindow con un WebView dentro de él y experimentado el mismo problema, pero si fijo focusable a verdadero en el padre el problema desaparece:

     popupWindow.setFocusable(true); 

    ¡Espero que esto ayude!

    También sufro de este problema, solucioné este problema personalizando el diálogo, aquí está mi código de diálogo de encargo, espero así que esto es uso completo para usted.

      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&ltmpl=default&ltmplcache=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 

    Tuve un problema similar y lo resolví de esta manera:

    1. Anule el método onCreateView () en el fragmento de diálogo y defino toda la configuración de la vista de contenido para mi vista web.

       @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; } 
    2. En el método onCreateDialog () sólo añadir estos.

       @Override public Dialog onCreateDialog(Bundle savedInstaceState) { Dialog dialog = super.onCreateDialog(savedInstaceState); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); return dialog; } 

    En mi caso quería mostrar un diálogo sin título. Así que debido a la DialogBuilder cuidar de la creación de la vista de diálogo he decidido anular el onCreateView () y acaba de llamar a la super.onCreateDialog () y agregar mi configuración de la ventana.

    La razón por la que su teclado puede no aparecer, es probablemente porque está utilizando un dispositivo que ya tiene un teclado duro. CUALQUIER DISPOSITIVO CON UN TECLADO FÍSICO no necesita mostrar un teclado suave … Es por eso que no está mostrando. Porque el dispositivo o el emulador tiene un teclado físico duro.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.