java - Android WebView - 2018年文本选择监听器

标签 java android webview html

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

如你所知,当用户点击上下文中的任何一段较长的文本时,Android 光标将会出现,然后我们可以选择任意数量的文本。

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

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

我怎样才能做到这一点?

到目前为止我做了什么?

我只是在应用程序顶部创建栏。但我不想要这个。 I just want to change COPY, SHARE part

这是代码:

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;
    }
};

最佳答案

您可以实现ActionMode.Callback界面可根据选择创建您自己的菜单。

An action mode's lifecycle is as follows:

onCreateActionMode(ActionMode, Menu) once on initial creation

onPrepareActionMode(ActionMode, Menu) after creation and any time the ActionMode is invalidated onActionItemClicked(ActionMode, MenuItem) any time a contextual action button is clicked onDestroyActionMode(ActionMode) when the action mode is closed

只需确保您的 TextView 允许文本选择 (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 内

关于java - Android WebView - 2018年文本选择监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53325530/

相关文章:

java - 过滤列表

android - 自签名证书在发布到 chromecast 时是否有效?

javascript - 使用javascript文件访问android Assets 文件夹

java - 如何从 WebView 导出 PDF,我可以在新 PDF 中选择文本

java - Android 如何在 android iframe webview 中传递 url?

java - JPanel 数组仅显示数组中的最后一个面板

java - 评估传递给从另一个类调用的模拟方法的参数

android - 逆向工程Android APK获取代码?

java - 在 Java 中转换对象时,是否保留对原始对象的引用?

android - 有什么方法可以获得CMOS Status?