Search code examples
androidsearchwebviewsearchview

show url in searchview android


I want to show the current URL of the WebView in a SearchView menu item. I know that to get the URL, I need to use the WebView method getUrl(), but I don`t know how to show it after searching the query.

Here my code:

@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;
}

Also how do I add the capability to copy and paste this URL?


Solution

  • can you use something like that ? You will get user changed url in shouldOverrideUrlLoading method

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

    If any issue, let me now

    Update

     @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);
    }
    

    Menu 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>
    

    Now ,you can use that edittext . It is simply hack of searchview ...

    Now you can do selectAll on click of searchView

    editText.selectAll();