在首选项屏幕中自动复制文本

Automatically copy text in a Preference Screen

以前可能有人问过这个问题,但我搜索了所有问题的答案,但找不到。

我的 Android 应用程序中有一个 PreferenceScreen,其中包含我在代码中以编程方式设置值的 EditTextPreferences 列表。但是,其中一个值不应是可编辑的,但用户必须能够复制该值(以粘贴到网站的特定字段中)。在当前状态下,用户可以更改它,但我不希望这种情况发生。

我曾尝试使用 android:inputType="none",但似乎行不通。

我想到了一个不同的想法,但不确定是否可行。我能否做到这一点,以便当用户单击该字段时,它会自动复制该值(并且可能会显示一个吐司,上面写着 "value copied" 或其他内容),以便他们可以将其粘贴到其他地方?然后我可以把它变成一个常规的偏好字段或其他东西,而不必担心用户改变值!

谁能给我一些关于这方面的提示?

是的,这是可能的。

设为<Preference>

之后你可以添加一个点击监听器,比如

    getPreferenceScreen().findPreference(prefkey)
        .setOnPreferenceClickListener(new OnPreferenceClickListener(){
        public boolean onPreferenceClick(Preference preference)
        {   
            String oldValue = sharedPreferences.getString(prefkey, prefdefaultvalue);

            // You can do what you want here like copy value to clipboard and display toast

        return true;
        }});

很简单! 您可以自定义与上面的 PreferenceScreen 相同的布局。 对于每个 EditText,设置 android:textIsSelectable="true" 以使文本首先可选择。在 editText.setCustomSelectionActionModeCallback(actionModeCallback) 之后;显示上下文操作模式(带有您定义的按钮的浮动菜单与您想要的功能相对应)。您可以 Google 了解实现细节。 三、复制和添加文本到剪贴板

private void copyText() {
    ClipboardManager clipboardManager = (ClipboardManager)
            getSystemService(Context.CLIPBOARD_SERVICE);

    CharSequence selectedTxt =  yourEditText.getText().subSequence(yourEditText.getSelectionStart(), yourEditText.getSelectionEnd());
    ClipData clipData = ClipData.newPlainText("text view", selectedTxt);
    clipboardManager.setPrimaryClip(clipData);
}

从现在开始,您复制的文本在剪贴板中,您可以将其粘贴到其他支持的视图中。