仅粘贴剪贴板中的数字

Pasting only numbers from the Clipboard

InputType of EditText 在我的申请中只有 number。如果剪贴板中的文本同时包含数字和字母,我如何才能仅将剪贴板中的数字粘贴到此 EditText

有可能

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

解决方法:有2个问题出现了。

首先:正如我测试过您的问题,如果您将 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;
            }
        }
    });
    
  • 第 3 步:在 class 中添加以下方法以仅拯救数字:

    public String getOnlyNumbers(String str) {
    
        str = str.replaceAll("[^\d.]", "");
    
        return str;
    
    }
    

希望对您有所帮助。如有疑问,请在下方留言。