我正在编写我的第一个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);
}
}
答案 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;
}
});