在搜索视图 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
中
我想在 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
方法
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