how to search text in webview

前端 未结 3 1204
抹茶落季
抹茶落季 2020-12-28 22:27

I am working in android... I am a newbie in this field... I developed a webview...i need to search for a particular text inside the webview... I searched about some question

3条回答
  •  误落风尘
    2020-12-28 22:51

    While this is an older question, based on AndroidEnthusiastic's version I managed to put together one that was actually working fairly decently. There is a minor error with the type of button on the Samsung Note I tested it on, but no matter how I was changing the IME types, it just got messed up. So I'm just hiding the soft-key keyboard. But the layout is better constructed.

    public class SearchDemoActivity extends ActionBarActivity implements View.OnClickListener
    {
    WebView mWebView;
    private RelativeLayout container;
    private Button nextButton, closeButton;
    private EditText findBox;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);
        getActionBar().setTitle(R.string.information_display);
        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.setWebViewClient(new WebViewClient());
        mWebView.loadUrl("http://devemat-androidprogramming.blogspot.com/");
    
        nextButton = (Button) findViewById(R.id.nextButton);
        closeButton = (Button) findViewById(R.id.closeButton);
        findBox = (EditText) findViewById(R.id.findBox);
        findBox.setSingleLine(true);
        findBox.setOnKeyListener(new OnKeyListener()
        {
            public boolean onKey(View v, int keyCode, KeyEvent event)
            {
                if ((event.getAction() == KeyEvent.ACTION_DOWN) && ((keyCode == KeyEvent.KEYCODE_ENTER)))
                {
                    mWebView.findAll(findBox.getText().toString());
    
                    try
                    {
                        // Can't use getMethod() as it's a private method
                        for (Method m : WebView.class.getDeclaredMethods())
                        {
                            if (m.getName().equals("setFindIsUp"))
                            {
                                m.setAccessible(true);
                                m.invoke(mWebView, true);
                                break;
                            }
                        }
                    }
                    catch (Exception ignored)
                    {
                    }
                    finally
                    {
                        InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        // check if no view has focus:
                        View vv = getCurrentFocus();
                        if (vv != null)
                        {
                            inputManager.hideSoftInputFromWindow(v.getWindowToken(),
                                    InputMethodManager.HIDE_NOT_ALWAYS);
                        }
                    }
                }
                return false;
            }
        });
        nextButton.setOnClickListener(this);
        closeButton.setOnClickListener(this);
    
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        super.onCreateOptionsMenu(menu);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.searchview_in_menu, menu);
        return true;
    }
    
    public boolean onPrepareOptionsMenu(Menu menu)
    {
        super.onPrepareOptionsMenu(menu);
        return true;
    }
    
    public boolean onOptionsItemSelected(MenuItem item)
    {
        switch (item.getItemId())
        {
            case R.id.action_search:
                search();
                return true;
        }
        return true;
    }
    
    public void search()
    {
        container = (RelativeLayout) findViewById(R.id.layoutId);
        if (container.getVisibility() == RelativeLayout.GONE)
        {
            container.setVisibility(RelativeLayout.VISIBLE);
        }
        else if (container.getVisibility() == RelativeLayout.VISIBLE)
        {
            container.setVisibility(RelativeLayout.GONE);
        }
    }
    
    @Override
    public void onClick(View v)
    {
        if (v == nextButton)
        {
            mWebView.findNext(true);
        }
        else if (v == closeButton)
        {
            container.setVisibility(RelativeLayout.GONE);
        }
    }
    }
    

    The layout XML (activity_search.xml):

    
    
    
    
    
    
    
        

    The menu:

    
    
    
    
    

提交回复
热议问题