📜  使 textview 可复制的 android,可点击 (1)

📅  最后修改于: 2023-12-03 15:22:07.825000             🧑  作者: Mango

使 TextView 可复制的 Android, 可点击

在开发 Android 应用程序时,有时需要在 TextView 中显示一些文本,此时用户可能需要复制这些文本或将其用作链接。但是,由于默认情况下 TextView 不可复制,因此用户无法完成该操作。在本文中,我们将介绍如何使 TextView 可复制,并使其成为可点击的链接。

使 TextView 可复制

要使 TextView 可以复制,我们需要做以下两件事:

  1. 将 TextView 的文本设置为可选(selectable):
<TextView
    android:id="@+id/textView"
    android:text="Hello World!"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textIsSelectable="true"/>

在上面的代码中,我们将 android:textIsSelectable 属性设置为 true。这将使 TextView 中包含的文本可选,用户可以选择并复制它。

  1. 为 TextView 添加复制菜单:
textView.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        menu.add(0, android.R.id.copy, 0, "Copy");
        return true;
    }

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

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.copy:
                ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                clipboard.setPrimaryClip(ClipData.newPlainText("text", textView.getText().subSequence(textView.getSelectionStart(), textView.getSelectionEnd())));
                mode.finish();
                return true;
            default:
                return false;
        }
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
    }
});

在上面的代码中,我们通过调用 setCustomSelectionActionModeCallback 方法为 TextView 添加了一个 ActionMode.Callback 回调。在 onCreateActionMode 方法中,我们为复制操作添加了一个菜单项。在 onActionItemClicked 方法中,我们实现了点击菜单项后的复制操作。

使 TextView 成为可点击的链接

如果 TextView 中的文本表示一个链接,我们可以使用 ClickableSpan 将其转换为可点击的链接。以下是将 TextView 中的文本转换为链接的示例:

SpannableString text = new SpannableString("Visit my website");
ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
        startActivity(browserIntent);
    }
};
text.setSpan(clickableSpan, 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(text);
textView.setMovementMethod(LinkMovementMethod.getInstance());

在上面的代码中,我们使用 SpannableString 创建了一个包含文本“Visit my website”的对象。然后,我们创建了一个 ClickableSpan,它可以在用户单击 TextView 上的链接时打开一个浏览器。最后,我们使用 setSpan 方法将 ClickableSpan 应用于 SpannableString 中的文本,并通过 setMovementMethod 方法将 TextView 设置为可点击。

这就是如何使 TextView 可复制和可点击链接的介绍。希望这篇文章能够帮助您在 Android 应用程序中实现这些功能。