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

时间:2018-08-24 13:09:27

标签: android copy preferenceactivity

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

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

我尝试使用android:inputType =“ none”进行调查,但似乎无法正常工作。

我想出了一个不同的主意,但不确定是否可行。我可以做到这一点,以便当用户单击该字段时它会自动复制该值(并且可能会显示一个吐司说“复制的值”或类似内容),以便他们可以将其粘贴到其他位置吗?然后,我可以将其设置为常规首选项字段或其他内容,而不必担心用户更改值!

有人可以给我有关此的任何提示吗?

2 个答案:

答案 0 :(得分:1)

是的。

将其设为<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;
        }});

答案 1 :(得分:1)

很简单! 您可以自定义与上面的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);
}

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