我想在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;
}
另外,如何添加复制和粘贴此网址的功能?
答案 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