【问题标题】:Android WebView - Text Selection Listener in 2018Android WebView - 2018 年的文本选择侦听器
【发布时间】:2019-04-18 21:56:51
【问题描述】:

我将创建一个应用程序,用户将在我的应用程序中输入网站网址。然后我使用 WebView 在我的应用中显示此页面。

如您所知,当用户在上下文中单击任意文本稍长时,会出现 android 光标,然后我们可以选择任意数量的文本。

选择后,我们会看到“COPY, SHARE, SELECT ALL”等。

我的问题是,当用户选择文本时,我想向他们展示不同的选项。比如说“MyCOPY、SendTwitter、SendMessage”。

我该怎么做?

到目前为止我做了什么?

我只是在应用顶部创建栏。但我不想要这个。

代码如下:

private WebView view;
private final String TAG = MainActivity.class.getSimpleName();
private ActionMode actionMode;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this.view = findViewById(R.id.webView);
    view.loadUrl("https://stackoverflow.com/questions/28385768/android-how-to-check-for-successful-load-of-url-when-using-webview-loadurl");
    view.setWebViewClient(new MyWebViewClient());
    Log.d(TAG, view.getUrl());
    view.setOnLongClickListener((v) -> {
        if (actionMode != null)
            return false;
        actionMode = startSupportActionMode(actionCallBack);
        return true;
    });
}

startSupportActionMode(actionCallBack) 在哪里

private ActionMode.Callback actionCallBack = new ActionMode.Callback() {

    @Override
    public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
        actionMode.getMenuInflater().inflate(R.menu.custommenu, menu);
        actionMode.setTitle("Choose");
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
        return false;
    }

    @Override
    public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
        switch (menuItem.getItemId()){
            case R.id.example_item_1:
                Toast.makeText(MainActivity.this, "Option 1 selected", Toast.LENGTH_SHORT).show();
                actionMode.finish();
                return true;
            case R.id.example_item_2 :
                Toast.makeText(MainActivity.this, "Option 2 selected", Toast.LENGTH_SHORT).show();
                actionMode.finish();
                return true;
            default:
                return false;
        }
    }

    @Override
    public void onDestroyActionMode(ActionMode actionMode) {
        actionMode = null;
    }
};

【问题讨论】:

  • 你有想过这个吗?
  • 不,我做不到。抱歉我的回复迟了

标签: java android webview webpage


【解决方案1】:

您可以实现ActionMode.Callback 接口以在选择时创建自己的菜单。

动作模式的生命周期如下:

onCreateActionMode(ActionMode, Menu) 在初始创建时一次

onPrepareActionMode(ActionMode, Menu) 在创建后和任何时候 动作模式无效 onActionItemClicked(ActionMode, MenuItem) 任何时候单击上下文操作按钮 动作模式关闭时的onDestroyActionMode(ActionMode)

只需确保您的文本视图允许文本选择 (android:textIsSelectable="true")

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

    // Called when the action mode is created; startActionMode() was called
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        // Inflate a menu resource providing context menu items
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
        return true;
    }

    // Called each time the action mode is shown. Always called after onCreateActionMode, but
    // may be called multiple times if the mode is invalidated.
    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false; // Return false if nothing is done
    }

    // Called when the user selects a contextual menu item
    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_share:
                shareCurrentItem();
                mode.finish(); // Action picked, so close the CAB
                return true;
            default:
                return false;
        }
    }

    // Called when the user exits the action mode
    @Override
    public void onDestroyActionMode(ActionMode mode) {
        mActionMode = null;
    }
};

然后在适当的时候调用startActionMode() 以启用上下文操作模式 (source),例如在 setOnLongClickListener 中

【讨论】:

  • 它创建,但这与我想要的不同。可以看看我更新的帖子吗?
猜你喜欢
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
相关资源
最近更新 更多