Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自动复制首选项屏幕中的文本_Android_Copy_Preferenceactivity - Fatal编程技术网

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

Android 自动复制首选项屏幕中的文本,android,copy,preferenceactivity,Android,Copy,Preferenceactivity,以前可能有人问过这个问题,但我到处寻找答案,却找不到答案 我在Android应用程序中有一个PreferenceScreen,其中有一个EditTextPreferences列表,我在代码中以编程方式设置其值。但是,其中一个值不应可编辑,但用户必须能够复制该值(粘贴到网站上的特定字段中)。在当前状态下,用户可以更改它,但我不希望发生这种情况 我尝试过使用android:inputType=“none”,但似乎不起作用 我想出了一个不同的主意,但我不确定这是否行得通。我可以这样做吗?当用户单击字段

以前可能有人问过这个问题,但我到处寻找答案,却找不到答案

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

我尝试过使用android:inputType=“none”,但似乎不起作用

我想出了一个不同的主意,但我不确定这是否行得通。我可以这样做吗?当用户单击字段时,它会自动复制值(可能会显示一个祝酒词,上面写着“value copied”或其他什么),这样他们就可以将其粘贴到其他地方?然后我就可以把它变成一个常规的首选项字段或其他什么,而不必担心用户更改值

有人能给我一些建议吗?

是的,这是可能的

将其设置为

之后,您可以添加一个单击式侦听器,如

    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;
        }});
很简单! 您可以自定义与上面的首选项屏幕相同的布局。 对于每个EditText,设置android:textIsSelectable=“true”以首先选择文本。在editText.setCustomSelectionActionModeCallback(actionModeCallback)之后;显示上下文操作模式(一个浮动菜单,其中包含您定义的与所需功能相对应的按钮)。您可以在谷歌上搜索这个实现细节。 第三,将文本复制并添加到剪贴板

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

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

谢谢!我结合了你的两个答案,它工作得非常完美(当然,在对我的代码进行了一些修改之后)!谢谢我结合了你的两个答案,它工作得非常完美(当然,在对我的代码进行了一些修改之后)!