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

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

【问题讨论】:

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

标签: android android-edittext clipboardmanager


【解决方案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();
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 2017-12-23
      • 2015-07-29
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多