Android setLayerType Webview
Je suis en train de créer une WebView dynamiquement à l'aide du code suivant:
mWebView = new WebView(this);
mWebView.setId(R.id.webview);
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.setWebViewClient(mWebViewClient);
mWebView.setWebChromeClient(mWebChromeClient);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
Mais, lorsque je lance le programme, mon application de la force se ferme indiquant une erreur qu'il n'existe pas de méthode comme "setLayerType'. Cependant, lorsque je crée le Webview via le xml, il semble y avoir aucun problème:
<WebView android:id="@+id/webview"
android:scrollbars="none"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layerType="software" />
J'utilise le "layertype' attribut d'ici et de l'app fonctionne très bien. Quelqu'un peut-il expliquer la différence? Il n'y a pas moyen de définir le type de couche d'une WebView dynamiquement?
OriginalL'auteur Abhijit | 2011-10-16
Vous devez vous connecter pour publier un commentaire.
REMARQUE: à La question "à quel niveau api voulez-vous construire?" est TRÈS différent de la question "qu'est-ce que l'api minimum niveau que vous ciblez?".
Donné le comportement que vous avez décrit, il suggère que vous faites construire avec l'api de niveau >=11 et le test sur un appareil qui est de l'api de niveau <11.
Parce que .setLayerType est disponible uniquement à partir de l'api de niveau 11, construire avec l'api de niveau >=11 construira bien, mais si vous n'êtes pas à l'aide de la compatibilité des trucs comme la réflexion ou l':
La compatibilité.getCompatibility().setWebSettingsCache(webSettings);
...puis, quand vous testez sur un appareil qui est de l'api de niveau <11, vous obtiendrez un crash, car cette méthode n'est pas pris en charge. En revanche, si vous effectuez un test sur l'appareil de l'api de niveau >=11, vous devriez trouver cela fonctionne.
OriginalL'auteur straya
Vieille question, mais la réponse de toute façon au cas où quelqu'un d'autre le trouve:
Vous pouvez appeler setLayerType par la réflexion. De cette façon, le code sera exécuté indépendant de la version de l'OS.
Il ne s'exécute pas correctement indépendant de la version de l'OS. veuillez voir la raison et de scénario dans lequel il ne fonctionne pas ici.
Il fonctionnera très bien sur toute version de l'OS. Si la méthode n'existe pas un NoSuchMethodException est levée et enclenché.
OriginalL'auteur Anders Haglund
code ci-dessous fonctionne très bien Android 3.0+ mais lorsque vous essayez ce code ci-dessous android 3.0 alors votre application fermées.
Vous essayez de code ci-dessous sur votre moins API 11.
Ou
vous pouvez également essayer le code ci-dessous qui fonctionne sur toutes les API amende.
code ci-dessus, l'utilisation complet pour moi.
OriginalL'auteur duggu
Ce que l'API lvl construisez-vous pour? ressemble .setLayerType(int, Peinture) a été introduit à l'api de lvl 11.
Depuis que je suis en utilisant un bas niveau API, il n'y a pas moyen de contourner cela, vous pensez?
OriginalL'auteur FoamyGuy