Page blanche entre Splash screen et affichage webview

Résolu
Ilyass2020 Messages postés 9 Statut Membre -  
Ilyass2020 Messages postés 9 Statut Membre -
bonjour
je le dit et je le répète , je suis pas doué en java , mais j essai toujours de développer mon code webview, cette fois le probleme c'est que quand je lance mon appli il y'a un vide en blanc entre le splash screen et l affichage du contenu. je vous pris de m aider.

mon code :

MainActivity.java
package com.akssa.groupe;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity {
    WebView webView;

    RelativeLayout relativeLayout;
    Button btnNoInternetConnection;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // remove title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main);

        webView = (WebView) findViewById(R.id.webView);
        // loadUrl


        webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.startsWith("tel:")) {
                    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
                    startActivity(intent);
                    return true;
                }
                return false;
            }
        });





        btnNoInternetConnection = (Button) findViewById(R.id.btnNoConnection);
        relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout);

        checkConnection();


        WebSettings webSettings = webView.getSettings();

        webSettings.setJavaScriptEnabled(true);
        //
        webSettings.setDomStorageEnabled(true);
        //
        webSettings.setUseWideViewPort(true);

        webSettings.setAllowContentAccess(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setAppCacheEnabled(true);



        btnNoInternetConnection.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                checkConnection();

            }
        });

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()){
        webView.goBack();
        return true;
        }
        return super.onKeyDown(keyCode, event);
    }


    public void checkConnection(){


        ConnectivityManager connectivityManager = (ConnectivityManager)
                this.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo wifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        NetworkInfo mobileNetwork = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);


        if (wifi.isConnected()){
            webView.loadUrl("https://www.groupe-alakssa.ma/");
            webView.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.GONE);



        }
        else if (mobileNetwork.isConnected()){
            webView.loadUrl("https://www.groupe-alakssa.ma/");
            webView.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.GONE);

        }
        else {


            webView.setVisibility(View.GONE);
            relativeLayout.setVisibility(View.VISIBLE);



        }



    }
}


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.akssa.groupe">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name="com.akssa.groupe.SplashScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.akssa.groupe.MainActivity">

        </activity>
    </application>

</manifest>

5 réponses

  1. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    re,

    Sûrement le temps que la page se charge.
    Généralement, on affiche un loader lors du chargement et on le cache lorsque la page est chargée.
    Un peu comme cela :

    
    progressBar.setVisibility(View.VISIBLE);
    
    webView.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("tel:")) {
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
                startActivity(intent);
                return true;
            }
            return false;
        }
    
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            progressBar.setVisibility(View.GONE);
        }
    });
    
    0
  2. Ilyass2020 Messages postés 9 Statut Membre
     
    je place le loader sur le splashScreen ?? tu peux m aider la ??
    0
    1. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 931
       
      Bah non, sur l'écran de la webview, le temps que la page se charge
      0
  3. Ilyass2020 Messages postés 9 Statut Membre
     
    voila le code SplashScreen.java
    package com.akssa.groupe;

    import androidx.appcompat.app.AppCompatActivity;

    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;

    public class SplashScreen extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
    @Override
    public void run() {
    startActivity(new Intent(SplashScreen.this,MainActivity.class));
    finish();
    }
    },2000);
    }
    }
    0
  4. Ilyass2020 Messages postés 9 Statut Membre
     
    ça veux dire que en peux pas remplacerle progressBar par le splashscreen , le temp ou le webview ce charge .
    0
    1. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 931
       
      Non. Tu comprends bien que Splashscreen et Main sont 2 Activity différentes. Il ne peut y avoir qu'une seule d'active à un instant T
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Ilyass2020 Messages postés 9 Statut Membre
     
    ok Merci beaucoup BunoCS :)
    0