WebView textarea ne pas faire apparaître le clavier
Quand je l'affiche d'un WebView
, je ne vois pas le clavier souple à éclater. Le dur clavier ne fonctionne pas!
Quels en sont les lacunes.
Le code que j'utilise pour accéder à la WebView
est:
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);
}
}
- voulez-vous dire que le clavier n'a pas de pop-up lorsque vous êtes sur la page web, ou lorsque vous cliquez dans un textarea?
- peut-être faut-il le champ de saisie html à l'intérieur d'un site web qui s'affiche dans la webview?
- Quand je clique sur la zone de texte, le clavier n'a pas de pop up, ni le dur clavier disponibles sur un Motorola Milestone fonctionne!
- mm, c'est étrange, en effet. J'ai couru quelques tests et n'a eu aucune difficulté pour ouvrir le clavier avec le plus simple webview. Pouvez-vous ajouter le code que vous utilisez pour votre webview?
- J'ai eu ce problème moi aussi, et c'est la page web spécifique. Je n'étais pas capable de s'attaquer à elle. Peut-être essayer de définir le focus à la webview par le code, ou d'utiliser la boule de commande pour naviguer trop. Si vous trouvez la solution merci de partager avec nous.
Vous devez vous connecter pour publier un commentaire.
La solution est un peu plus que ce Sana avait. Il est décrit comme un bug sur au Android site ( http://code.google.com/p/android/issues/detail?id=7189 ):
webView.requestFocus(View.FOCUS_DOWN);
.Le problème était que webview n'était pas de se concentrer quand il a été chargé, par conséquent, avec
résolu le problème.
Je suis surpris de voir que même sur Android 4.1 (testé sur SGS3) le problème est toujours présent, et en remplaçant onTouch() ne résolvent pas pour moi.
Code de Test:
Mon complexe solution est de remplacer WebView avec MyWebView:
une ligne de réponse et il fonctionne parfaitement
où wb est mon objet de
webView
Pour ceux d'entre vous à la recherche d'une solution lorsque la
WebView
est dans unAlertDialog
, ici, la réponse a résolu ce problème pour moi: Montrer clavier souple en AlertDialog avec une WebView à l'intérieur (Android)Eu le même problème et non des solutions ci-dessus a travaillé. Cette woked pour moi
J'ai eu le même problème sur Jelly Bean, mais aucune des deux solutions n'a fonctionné pour moi. Cette solution a fonctionné pour moi sur JellyBean
Parfois le android.R.attr.webViewStyle n'est pas appliquée par défaut. Cela garantit que le style est toujours appliqué.
J'ai eu un problème similaire.... et plus tard, j'ai constaté que la zone de texte sur la page web de mon site web afficher montré a été désactivé.
Cochez cette case si la page a le même problème dans le navigateur?
J'ai eu exactement le même problème aucune des deux solutions n'a fonctionné pour moi. Après l'âge d'essayer j'ai enfin trouvé le problème.
Certains de différentes pages web, j'étais rendu avec WebView ne rentre pas correctement dans la vue Web et comme un résultat d'un div (ou autre composant html ) étaient invisible posé sur le champs de saisie. Bien que les champs de saisie est apparu sélectionné quand ils sont touchés, ils ne seraient pas permettre la saisie de texte (même si j'ai réussi à obtenir le clavier en place à l'aide de la boule).
Donc la solution.
Ce ne sera pas arrêter complètement le problème, mais permet d'avoir une vue plus comme un navigateur PC sites qui sont conçus pour. Moins de changement de la superposition.
Espère que cela vous aide.
essayez ceci --> le prénom est le nom du champ et assurez-vous qu'il dose ont pas d'attribut autofocus.
Pour le rendre facile, et que les autres solutions ont des problèmes de travail sur tous les appareils ou dans tout état, je suis toujours à l'aide d'un petit hack pour surmonter ce problème sans toucher au code, il suffit d'ajouter cachés
editText
à la mise en page contient de l'webView
qui accordera le focus à l'ensemble de la vue automatiquement et vous n'aurez pas à vous soucier de lawebView
champs de texte plus:Donc, toute la mise en page serait comme: