Поиск в WebView
У меня есть вот такая читалка, подтягивающая ресурс их txt файла (в коде есть элементы для смены тем оформления и запоминания строки, на которой пользователь остановил чтение), не могу подступиться к тому, как сделать поиск по тексту на странице
public class ReadActivity extends AppCompatActivity {
private float size_coef; //коэффициент увеличения шрифта
private float color; //цвет фона
private WebView mWebView;
//получить коэффициент размера шрифта
public float getSizeCoef() {
return size_coef;
}
//получить цвет фона
public float getColor() {
return color;
}
private int scrollPosition = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
SharedPreferences settings = getSharedPreferences("MyAppColor", MODE_PRIVATE);
color= settings.getFloat("color", WHITE);
if (color == BLACK) {
setTheme(R.style.AppThemeNight);
}
if (color == WHITE) {
setTheme(R.style.AppTheme);
}
super.onCreate(savedInstanceState);
WebView myWebView = new WebView(this) {
@Override
protected void onSizeChanged(int w, int h, int ow, int oh) {
Intent position = getIntent();
int positionValue = position.getIntExtra("head", 0);
SharedPreferences settings = getSharedPreferences("MyScroll", MODE_PRIVATE);
float position_scroll = settings.getFloat(String.valueOf(positionValue), 0);
super.onSizeChanged(w, h, ow, oh);
if (getContentHeight() > 0) scrollTo(0, (int) position_scroll); // осталось отловить высоту прокрутки и подсунуть ее сюда
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
scrollPosition = t;
}
};
myWebView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT // <<-- это важный момент
));
setContentView(myWebView);
Intent intent = getIntent();
//получаем строку и формируем имя ресурса
String resName = "n" + intent.getIntExtra("head", 0);
Log.i("name", resName);
Context context = getBaseContext(); //получаем контекст
//читаем текстовый файл из ресурсов по имени
String text = readRawTextFile(context, getResources().getIdentifier(resName, "raw", "ru.erstendev.ppvsn"));
mWebView = myWebView;
settings = getSharedPreferences("MyAppColor", MODE_PRIVATE);
color= settings.getFloat("color", WHITE);
if (color == BLACK) {
text="<font color='white'>" + text + "</font>";
setTheme(R.style.AppThemeNight);
}
if (color == WHITE) {
text="<font color='black'>" + text + "</font>";
setTheme(R.style.AppTheme);
}
myWebView.loadDataWithBaseURL(null, text, "text/html", "en_US", null);
WebSettings webSettings = myWebView.getSettings(); // инициируем настройки WebView. После этого элемента следует вставить адаптер, подгружающий настройки из файла
settings = getSharedPreferences("MyAppSett", MODE_PRIVATE);
size_coef= settings.getFloat("size_coef", 1f);
webSettings.setDefaultFontSize((int) (20*size_coef)); // устанавливаем размер текста
settings = getSharedPreferences("MyAppColor", MODE_PRIVATE);
color= settings.getFloat("color", WHITE);
myWebView.setBackgroundColor((int) color); // устанавливаем цвет фона
}
private void createWebPrintJob(WebView webView) {
PrintManager printManager = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
printManager = (PrintManager) this
.getSystemService(Context.PRINT_SERVICE);
}
PrintDocumentAdapter printAdapter =
null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
printAdapter = webView.createPrintDocumentAdapter("MyDocument");
}
String jobName = getString(R.string.app_name) + " Print Test";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
printManager.print(jobName, printAdapter,
new PrintAttributes.Builder().build());
}
}
@Override
public void onPause() {
Intent position = getIntent();
int positionValue = position.getIntExtra("head", 0);
SharedPreferences settings = getSharedPreferences("MyScroll", MODE_PRIVATE);
SharedPreferences.Editor value_add = settings.edit();
super.onPause();
value_add.putFloat(String.valueOf(positionValue), scrollPosition);
value_add.commit();
}
//читаем текст из raw-ресурсов
public static String readRawTextFile(Context context, int resId)
{
InputStream inputStream = context.getResources().openRawResource(resId);
InputStreamReader inputReader = new InputStreamReader(inputStream);
BufferedReader buffReader = new BufferedReader(inputReader);
String line;
StringBuilder builder = new StringBuilder();
try {
while (( line = buffReader.readLine()) != null) {
builder.append(line);
builder.append("\n");
}
} catch (IOException e) {
return null;
}
return builder.toString();
}