Android Webview的启动画面

时间:2016-02-21 00:25:57

标签: java android webview splash-screen splash

我有一个WebView应用程序,并希望添加一个启动画面,以便在加载页面时显示,或者在设定的时间内显示。我尝试了一些其他的解决方案,但找不到一个有效的解决方案。如果需要知道,我的splash图像是splash.png,位于drawable文件夹中。

这是我的MainActivity.java

public class MainActivity extends Activity {

private GoogleApiClient client;

@Override
public void onBackPressed()
{
    WebView webView = (WebView) findViewById(R.id.webView);
    if(webView.canGoBack()){
        webView.goBack();
    }
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }

    this.doubleBackToExitPressedOnce = true;
    Toast.makeText(this, "Tap Twice To Exit", Toast.LENGTH_SHORT).show();

    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            doubleBackToExitPressedOnce=false;
        }
    }, 2000);
}

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


    WebView view = (WebView) this.findViewById(R.id.webView);
    view.getSettings().setJavaScriptEnabled(true);
    view.setWebViewClient(new MyBrowser());

    client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    if(isNetworkStatusAvialable (getApplicationContext())) {
        view.loadUrl("file:///android_asset/index.html");
    } else {
        view.loadUrl("file:///android_asset/error.html");

    }
}
public static boolean isNetworkStatusAvialable (Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager != null)
    {
        NetworkInfo netInfos = connectivityManager.getActiveNetworkInfo();
        if(netInfos != null)
            if(netInfos.isConnected())
                return true;
    }
    return false;
}
@Override
public void onStart() {
    super.onStart();

    client.connect();
    Action viewAction = Action.newAction(
            Action.TYPE_VIEW,
            "MLINKS",
            Uri.parse("http://host/path"),

            Uri.parse("android-app://PACKAGE-NAME/http/host/path")
    );
    AppIndex.AppIndexApi.start(client, viewAction);
}

@Override
public void onStop() {
    super.onStop();

    Action viewAction = Action.newAction(
            Action.TYPE_VIEW,
            "MLINKS",
            Uri.parse("http://host/path"),
            Uri.parse("android-app://PACKAGE-NAME/http/host/path")
    );
    AppIndex.AppIndexApi.end(client, viewAction);
    client.disconnect();
}

private class MyBrowser extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

boolean doubleBackToExitPressedOnce = false;

}

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

编辑:

定义进度对话框:

    private ProgressDialog pd;

然后在你的内心:

view.setWebViewClient(new MyBrowser(){

插入此内容:

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            pd.show();
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            pd.dismiss();
        }

答案 1 :(得分:0)

我曾经做过类似的事情。 IIRC,它是这样的:

首先,我创建了一个特殊的ImageView子类,它覆盖了onTouchEvent()并丢弃了所有事件。

然后,对于我的布局,我将ImageView子类覆盖了WebView然后将其隐藏起来,就像这样(例如):

<FrameLayout
    ...
    >

    <WebView
        ...
        />

    <com.example.TouchHandlerImageView
        ....
        android:src="R.drawable.splash"
        android:visibility="gone"
        />  
....
</FrameLayout>

然后我的代码就像这样:

  • 显示启动图像视图。 (onTouchEvent()会阻止触摸事件进入下面的WebView
  • 启动页面加载(在我的情况下,我还必须运行一些javascript来设置页面)
  • WebViewClient onPageFinshed()中,隐藏启动图像视图,显示WebView页面已满载。

答案 2 :(得分:0)

首先制作一个背景并在主屏幕上显示它,直到数据准备就绪。

使用AsyncTask类,因为它有3个方法

1- onPreExecute()//这里不做任何事情

2- doInBackgroundProcess()//在这里获取你的数据

3- onPostExecute()//取回原始背景