我有一个使用WebViews的应用程序(minSdkVersion 17)。如果可以添加搜索(并突出显示找到的结果)功能,将会非常有帮助。问题是我的编程技巧非常低,而且对圣杯的搜索没有得到很好的答案。
我发现了这个主题(还有一些moe,包括其他论坛): how to search text in webview, Android - Highlight text in WebView above android version 4.0.3, search text on WebView android 和其他几个,但所有这些都是不完整的让我理解它们是如何工作的或者发现的代码太旧了,并且有可能修复错误(由于android studio中的更改,我猜)我可以制作对他们有用的东西。
来自活动的我的XML:
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/footer"
android:layout_below="@+id/layoutId">
<WebView
android:id="@+id/webviewautoturisme"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</ScrollView>
<RelativeLayout
android:id="@+id/layoutId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:orientation="horizontal">
<Button
android:id="@+id/nextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:text="Caută"
android:textColor="#ffffff"
android:textStyle="bold" />
<EditText
android:id="@+id/findBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@+id/nextButton"
android:hint="Caută după localitate"
android:maxLines="1" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/footer"
android:layout_width="wrap_content"
android:layout_height="95dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true">
<Button
android:id="@+id/buttoBACK"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/adView"
android:layout_centerHorizontal="true"
android:minWidth="150dp"
android:text="@string/sBackMainMenu"
android:textAllCaps="true"
android:textColor="#FFFFFF"
android:textStyle="bold" />
</RelativeLayout>
</RelativeLayout>
是我发现的东西,对代码做了一些小的改进,因为它有点过时,我也想使用java,但我没有运气。 我还发现有一个SearchView,所以在我使用的另一个活动中:
<SearchView
android:id="@+id/searchField"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:queryHint="Căutare după localitate"
android:orientation="horizontal">
</SearchView>
和Java:
package ro....;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebView;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
public class PKWinListActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pkwinlist);
MobileAds.initialize(getApplicationContext(), "ca-app-pub-....");
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().addTestDevice("....").addTestDevice("....").addTestDevice("....").build();
mAdView.loadAd(adRequest);
findViewById(R.id.buttoBACK)
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
if (isMobileDataEnabled()) {
WebView myWebView = (WebView) findViewById(R.id.webviewautoturisme);
myWebView.loadUrl("https://www...");
myWebView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
} else {
//Mobile data is disabled here
new AlertDialog.Builder(this).setTitle(getString(R.string.sDataReqMes))
.setMessage(getString(R.string.sDataReqEnable)).setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
}
}).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
}).show();
}
}
private boolean isMobileDataEnabled() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobileDataEnabled = connectivityManager.getActiveNetworkInfo();
return mobileDataEnabled != null && mobileDataEnabled.isConnected();
}
}
问题在于我无法弄清楚如何进行搜索按钮工作,因为我发现以前的解决方案已经过时了。 如何使搜索按钮工作?