在searchview android中显示网址

时间:2016-12-20 10:50:03

标签: android search webview searchview

我想在URL菜单项中显示WebView的当前SearchView。 我知道要获得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;
}

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

2 个答案:

答案 0 :(得分:1)

你能用这样的东西吗?您将在shouldOverrideUrlLoading方法

中获取用户更改的网址
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>

现在,您可以使用该edittext。这简直就是搜索视图......

现在,您可以点击selectAll

进行searchView
editText.selectAll();

答案 1 :(得分:0)

一旦用户点击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);设置它,例如:inside onPageFinished