如何收听webview网址单击并启用/禁用操作栏上的按钮

时间:2013-04-29 08:29:21

标签: android android-actionbar android-webview webviewclient

我正在开发一个应用程序,我正在使用webview来加载某些网站。我也定制了actionbar我有网站导航button。以下是我的布局看起来如何:

How it looks to me.

当我加载网站时,我的所有三个按钮都是可见的,但我希望它们仅在用户点击某个URL时才可见,这样用户就可以轻松了解这些按钮的用途。

我已将所有功能添加到这些按钮。这是我的代码:

website_back = (ImageButton) cView.findViewById(R.id.website_back);
website_forward = (ImageButton) cView.findViewById(R.id.website_forward);
website_refresh = (ImageButton) cView.findViewById(R.id.website_refresh);

if (v.getId() == R.id.website_back) {
    webview.goBack();
}
if (v.getId() == R.id.website_forward) {
    webview.goForward();
}
if (v.getId() == R.id.website_refresh) {
    webview.reload();
}

我的WebViewClient:

private class HelloWebViewClient extends WebViewClient {

    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        progress.setVisibility(View.VISIBLE);
        super.onPageStarted(view, url, favicon);
    }

    public void onPageFinished(WebView view, String url) {
        progress.setVisibility(View.GONE);
        super.onPageFinished(view, url);
    }

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        website_back.setImageResource(R.drawable.webview_back);
        view.loadUrl(url);
        return true;
    }
}

如何在用户点击网页浏览中推出的网站上的某些网址时显示这些按钮?

任何形式的帮助都将受到赞赏。

2 个答案:

答案 0 :(得分:3)

您需要将WebViewClient附加到WebView以侦听正在获取的URL。

mWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.equals(mOriginalUrl)){
            //initial url load, ignoring.
        }
        else {
            //url was navigated to - do something
        }

        return super.shouldOverrideUrlLoading(view, url);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        //page has finished loading
    }
});

答案 1 :(得分:0)

这对我有用。希望它对你有用。试试这个

ExternalSiteActivity.class

public class ExternalSiteActivity extends Activity{
WebView webView;
String productURL;
ProgressBar progressBar;
ImageButton webBackButton;
ImageButton webForwButton;
ImageButton webRefreshButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.external_site_activity);
    productURL= (String) getIntent().getStringExtra("productUrl");
    System.out.println(productURL+"**********");
    progressBar=(ProgressBar)findViewById(R.id.progress);
    progressBar.setVisibility(View.INVISIBLE);
    webView = (WebView) findViewById(R.id.webview);
    webBackButton=(ImageButton)findViewById(R.id.web_back_button);
    webForwButton=(ImageButton)findViewById(R.id.web_forw_button);
    webRefreshButton=(ImageButton)findViewById(R.id.web_refresh_button);
    webView.setWebViewClient(new MyWebViewClient());
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl(productURL);
    webBackButton.setOnClickListener( new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            if(webView.canGoBack())
                webView.goBack();
        }
    });
    webForwButton.setOnClickListener( new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            if(webView.canGoForward())
                webView.goForward();
        }
    });
    webRefreshButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            webView.reload();
        }
    });
}

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

    @Override
    public void onFormResubmission(WebView view, Message dontResend,
            Message resend) {
        Log.v("onFormResubmission", "onFormResubmission");
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        if(webView.canGoBack())
        {
            webBackButton.setEnabled(true);
        }
        else
        {
            webBackButton.setEnabled(false);
        }
        if(webView.canGoForward())
        {
            webForwButton.setEnabled(true);
        }
        else
        {
            webForwButton.setEnabled(false);
        }
        progressBar.setVisibility(View.VISIBLE);
        Log.v("onPageStarted", "onPageStarted");
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        progressBar.setVisibility(View.INVISIBLE);
    }

    @Override
    public void onLoadResource(WebView view, String url) {
        Log.v("on load ","load resources----");
    }

    // To handle "Back" key press event for WebView to go back to previous screen.
}

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

}