在搜索视图 android 中显示 url

show url in searchview android

我想在 SearchView 菜单项中显示 WebView 的当前 URL。 我知道要获取URL,我需要使用WebView方法getUrl(),但我不知道如何在搜索查询后显示它。

这是我的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);

    MenuItem searchItem =  menu.findItem(R.id.action_search);

    final SearchView searchView = (SearchView)searchItem.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            String url = "https://www.google.com/search?q="+query;
            PlaceholderFragment.mWebView.loadUrl(url);
            searchView.clearFocus();
            return true;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });
    return true;
}

另外,我如何添加复制和粘贴此 URL 的功能?

你能用类似的东西吗?您将在 shouldOverrideUrlLoading 方法

中更改用户 url
PlaceholderFragment.mWebView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView wView, String url)
    {
       searchView.setQuery(url, false);
        wView.loadUrl(url);
        return true;
    }
});
final SearchView searchView = (SearchView)searchItem.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            String url = "https://www.google.com/search?q="+query;
            PlaceholderFragment.mWebView.loadUrl(url);
            searchView.clearFocus();
            return true;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });

如有任何问题,请联系我

更新

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.menu, menu);
            searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

        int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
        EditText editText = (EditText) searchView.findViewById(id);
}

菜单xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/action_search"
        android:actionLayout="@layout/my_search_view"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@android:drawable/ic_menu_search"
        android:showAsAction="always"
        android:title="Search" />
</menu>

现在,您可以使用该编辑文本了。它只是 searchview 的 hack ...

现在您可以通过单击 searchView

来执行 selectAll
editText.selectAll();

一旦用户点击 searchView 删除其中的所有文本(如果有)检查 this

开始加载用户在您的 webView

中搜索的详细信息

在您的网络视图中使用侦听器,并在每次开始加载网络视图以进行新搜索后调用此方法

这里我添加了所有你需要知道但不需要全部使用的覆盖方法..

如果你想要直到页面加载你可以显示加载..看看评论

boolean loadingFinished = true;
boolean redirect = false;

    mWebView.setWebViewClient(new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(
            WebView view, WebResourceRequest request) {
        if (!loadingFinished) {
           redirect = true;
        }

        loadingFinished = false;
        webView.loadUrl(request.getUrl().toString());
        return true;
    }

    @Override
    public void onPageStarted(
            WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        loadingFinished = false;
        //SHOW LOADING IF IT ISNT ALREADY VISIBLE  
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        if(!redirect){
           loadingFinished = true;
        }

        if(loadingFinished && !redirect){
            //HIDE LOADING IT HAS FINISHED
        } else{
            redirect = false; 
        }
    }
});

现在找到您想要向用户显示数据的最佳位置 searchView 例如:当页面刚开始加载时,当它完全加载时

然后在所选覆盖方法中使用 searchView.setQuery(url, false); 设置它,例如:在 onPageFinished