仅粘贴剪贴板中的数字

Posted

技术标签:

【中文标题】仅粘贴剪贴板中的数字【英文标题】:Pasting only numbers from the Clipboard 【发布时间】:2019-04-16 04:59:41 【问题描述】:

我的应用程序中的EditText 中的InputType 仅是number。如果剪贴板中的文本同时包含数字和字母,如何仅将剪贴板中的数字粘贴到此EditText

【问题讨论】:

使用 xml 无法做到这一点,但您可以借助 Java 或 Kotlin 中的代码来做到这一点 是的,我需要以编程方式进行 请查看解决方案。 你不懂我的代码 【参考方案1】:

解决方案:出现了两件事。

首先:我已经测试了您的问题,如果您将EditText 设置为android:inputType="number",那么它的行为正是您想要的。如果您粘贴字母数字字符串,则它仅显示数字。它根本不显示字母或任何特殊字符。这是在我的设备Android 7.1.1 (API25) 中测试的。

其次:如果您仍然想使用适合您需要的解决方法,那么您可以使用TextWatcher

步骤 1:创建一个 EditText 全局对象,您将在其中粘贴您的 String,并对其进行初始化:

EditText editText;

然后在你的onCreate():

editText = findViewById(R.id.your_editText);

第二步:添加TextWatcher

editText.addTextChangedListener(new TextWatcher() 
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 

    

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) 

    

    @Override
    public void afterTextChanged(Editable s) 
        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        try 
            CharSequence txt = clipboard.getPrimaryClip().getItemAt(0).getText();
            String str = getOnlyNumbers(txt.toString());
            editText.setText(str);
         catch (Exception e) 
            return;
        
    
);

第三步:在你的类中添加下面的方法来只拯救数字:

public String getOnlyNumbers(String str) 

    str = str.replaceAll("[^\\d.]", "");

    return str;


我希望这会有所帮助。如果您有任何疑问,请在下方评论。

【讨论】:

【参考方案2】:

是的,有可能

        final ClipboardManager myClipboard;
        final ClipData[] myClip = new ClipData[1];
        final int[] voterid;
        voterid= new int[]1, 2, 3, 4;

使用基本适配器

        farea.setText(voterid);

        farea.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                myClip[0] = ClipData.newPlainText("text", voterid);
                myClipboard.setPrimaryClip(myClip[0]);

                Toast.makeText(getApplicationContext(), "Text Copied",
                        Toast.LENGTH_SHORT).show();
            
        );

【讨论】:

以上是关于仅粘贴剪贴板中的数字的主要内容,如果未能解决你的问题,请参考以下文章

如何将剪贴板中的数据粘贴到网页中的焦点文本控件?

使用 xclip 将剪贴板内容粘贴到 bash 中的变量中

使用剪贴板跟踪 x11 中的复制粘贴

在 EditText 上禁用剪贴板建议中的粘贴

VB如何利用剪贴板复制、粘贴文件,用到啥API

如何在Delphi中使用剪贴板