仅粘贴剪贴板中的数字
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;
}
希望对您有所帮助。如有疑问,请在下方留言。
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; }
希望对您有所帮助。如有疑问,请在下方留言。