1

Voici mon code pour que:Mon webview se décompose en version jelly bean et kitkat, mais fonctionne très bien en sucette et en haut. Comment puis-je le réparer pour le jelly bean et le kitkat?

public void mywebview(){ 
try { 
    webview.setBackgroundColor(0); 
    webview.getSettings().setJavaScriptEnabled(true); 
    webview.addJavascriptInterface(new MyJavaScriptInterface(), "MYOBJECT"); 
    webview.getSettings().setAllowUniversalAccessFromFileURLs(true); 
    webview.getSettings().setUseWideViewPort(true); 
    webview.getSettings().setLoadWithOverviewMode(true); 
    webview.getSettings().setBuiltInZoomControls(true); 
    webview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); 

    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    webview.getSettings().setAllowFileAccess(true); 
    webview.canScrollHorizontally(1); 
    webview.setInitialScale(1); 
    webview.getSettings().setDefaultFontSize(2); 

    webview.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      webview.setHorizontalScrollBarEnabled(true); 
      webview.setInitialScale(1); 
      return false; 
     } 
    }); 

    webview.setWebViewClient(new WebViewClient() { 


     @Override 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      Toast.makeText(view.getContext(), "Authentication Error", Toast.LENGTH_LONG).show(); 
      CookieManager cookieManager = CookieManager.getInstance(); 
      cookieManager.setCookie(USERNAME, PASSWORD); 

      super.onReceivedError(view, errorCode, description, failingUrl); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

       return super.shouldOverrideUrlLoading(view, url); 
      } 
     } 

     public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { 
     } 

     @Override 
     public WebResourceResponse shouldInterceptRequest(WebView view, String url) { 
      SharedPreferencesManager mgr = SharedPreferencesManager.getInstance(); 
      StringBuilder stringBuilder = new StringBuilder(); 
      DefaultHttpClient client = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet(URL); 
      try { 
       HttpResponse response = client.execute(httpGet); 
       StatusLine statusLine = response.getStatusLine(); 

       int statusCode = statusLine.getStatusCode(); 
       if (statusCode == 200) { 

       } 

      } catch (Exception e) { 

      } 
      CookieStore cookieStore = mgr.getCookieStore(); 
      Cookie cookie = cookieStore.getCookies().get(1); 

      CookieManager cookieMgr = CookieManager.getInstance(); 
      cookieMgr.setCookie(url, cookie.getName() + "=" + cookie.getValue()); 
      CookieSyncManager.getInstance().sync(); 

      return super.shouldInterceptRequest(view, url); 
     } 
    }); 

    webCookieManager = CookieManager.getInstance(); 

    webCookieManager.setAcceptCookie(true); 
    CookieStore cookieStore = mgr.getCookieStore(); 
    Cookie cookie = cookieStore.getCookies().get(1); 

    webCookieManager.setCookie(URL, cookie.getName() + "=" + cookie.getValue() + ";"); 
    CookieSyncManager.getInstance().sync(); 
    webview.loadUrl(URL); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
} 

Il semble que webresourceresponse est compatible avec uniquement avec la version de sucettes et au-dessus. Y a-t-il un moyen de le réparer pour travailler avec des versions inférieures, comme jelly bean et kitkat? Aussi, par "mess", je veux dire qu'il regarde tous alignés verticalement empilés ensemble dans une vue, contrairement à la version lollipop + où la vue semble décemment organisé comme prévu. Voici mon xml pour le même:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myholder" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000000" 
    > 
<WebView 
     android:id="@+id/my_webview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 
</RelativeLayout> 

Répondre

0

je ne pense pas qu'il y ait une façon que vous pouvez changer que si vous utilisez l'ancienne pour l'ancien API see this

+0

Comment puis-je faire cela? cet exemple est trop vague –

0

La meilleure/seule façon de faire cela être d'écrire un code spécifique à la version, un pour le jelly bean et kitkat, et un pour lollypop et ci-dessus. Je n'ai pas regardé dans le code qui le ferait fonctionner sur les versions inférieures mais la manière de l'aborder serait de vérifier la version de SDK, et d'exécuter le code pour la version spécifique.

Exemple: (code modifié à partir de: How to support multiple android version in your code?)

// System information 
private final int sdkVersion = Build.VERSION.SDK_INT; 
// If you want to go really old: 
// (actually, there is a question about how this issue should be handled 
// systematically. Suggestions welcome.) 
// final int sdkVersion = Integer.parseInt(Build.VERSION.SDK); 

// For meaning of other variable, see notification documentation on the android website. 
if (sdkVersion > Build.VERSION_CODES.LOLLIPOP) { 
    myWebviewForLollipopAndAbove webview = new myWebviewForLollipopAndAbove(); 
    //Do things with the webview, finish implementing 
} 
else { 
    myWebviewForBelowLollipop webview = new myWebviewForBelowLollipop(); 
    //Do things with the webview, finish implementing 
} 

Il est évident que ce code devrait être placé où la vue Web est initialisé - et vous aurez besoin de faire une autre classe WebView pour les autres versions du SDK.

+0

mais ce n'est pas le problème auquel je suis confronté. Le problème est de savoir si public WebResourceResponse shouldInterceptRequest (vue WebView, String url) peut être rendu rétrocompatible en quelque sorte? –