某些网址加载时是否可以执行某些操作?

时间:2014-12-18 07:58:09

标签: java android events webview load

我正在编写我的第一个Android“应用程序”,并且有点作弊,因为我使用WebView来显示主要的“应用程序”。

我发现通过将背景渲染为ImageView而不是从HTML代码中加载它们,应用程序通常会更快。 我有一个ImageView作为应用程序的背景并从头开始加载,并且在WebView后面(WebView背景是透明的)。

但是一旦用户在文本字段中按Enter键,并被发送到WebView中的另一个网页,我想摆脱第一个背景ImageView并加载一个新的背景,以便前一个没有减慢速度。所以我想我必须检测某种加载事件,并对此做些什么。但是,我一直在查看文档,但我什么也没找到。我甚至不知道从哪里开始。有没有办法做到这一点?谢谢。

这是我的代码,如果有任何用处(但我认为它不相关)。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();

        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.activity_main_webview);
        mWebView.setBackgroundColor(0x00000000);
        mWebView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);


        ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        if((mWifi != null && mWifi.isConnected()) || (mMobile != null && mMobile.isConnected())) {

            WebSettings webSettings = mWebView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setCacheMode(webSettings.LOAD_NO_CACHE);
            mWebView.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    findViewById(R.id.splash).setVisibility(View.GONE);
                    findViewById(R.id.activity_main_webview).setVisibility(View.VISIBLE);
                }
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    mWebView.loadUrl("file:///android_asset/error.html");
                }
            });
            mWebView.loadUrl(got_url);
        }
        else
        {
            setContentView(R.layout.activity_main);
            mWebView = (WebView) findViewById(R.id.activity_main_webview);
            mWebView.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    findViewById(R.id.splash).setVisibility(View.GONE);
                    findViewById(R.id.activity_main_webview).setVisibility(View.VISIBLE);
                }
            });
            mWebView.loadUrl("file:///android_asset/error-nointernet.html");
        }

    }

感谢扎法尔,我最终做了什么:

        public void onPageStarted(WebView view, String url) {
            if(url.equals(certainUrl)) //url returns last requested URL.
            {
                findViewById(R.id.background0).setVisibility(View.GONE);
                findViewById(R.id.background1).setVisibility(View.VISIBLE);
            }
        }

1 个答案:

答案 0 :(得分:1)

我得到的是你想在webview开始加载后加载背景图像。 如果是这种情况,您可以使用

onPageStarted

并在此处设置图像。 如果您可以获得更多解决方案,请查看此link。如果还有其他要求,请回复。

虽然你已经做了你想做的事情,但我想添加这个方法,如果它可以帮助你在其他情况下这样做。

webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url.startsWith("abcd://")) {
        // your code
        return true;
    }
    return false;
}
});