java - 当某些 url 加载时是否可以执行某些操作?

标签 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);
            }
        }

最佳答案

我得到的是你想要在 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;
}
});

关于java - 当某些 url 加载时是否可以执行某些操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27541691/

相关文章:

java - Apache commons CLI - 重复选项

java - 方法的参数 - 同时需要类和接口(interface)

java - 谷歌 Foobar : Free the Bunny Prisoners clarification

java - 使用通用 Map 参数重写方法

android - 在应用程序中购买 Nokia X Market 应用程序

android - 基线对齐的 TextInputLayout 和 Spinner

c# - C# 中的事件处理 - 无回调

c# - 我怎样才能停止处理进一步的事件

java - Android OpenGL ES 2.0 只限于内存中的 16 个纹理?

javascript - GWT - ListBox,如何预览 changeEvent