📜  android-edittext 只允许字符和数字 - Java (1)

📅  最后修改于: 2023-12-03 14:39:10.788000             🧑  作者: Mango

Android EditText只允许输入字符和数字 - Java

在Android应用程序中,EditText是一个常用的控件,用于接收用户的输入。有时我们需要限制EditText只能输入字符和数字,本文将介绍一种实现这一目标的方法。

方法概述

我们可以通过为EditText绑定一个TextWatcher来监听文本输入的变化,并在输入发生变化时判断输入的字符是否为字符或数字。如果输入的字符不符合要求,则可以通过设置EditText的文本为之前有效的文本来阻止输入不符合要求的字符。

实现步骤

以下是实现EditText只允许字符和数字输入的步骤:

  1. 创建一个EditText控件并将其添加到布局文件中。
  2. 获取EditText的实例,并为其添加一个TextWatcher。
  3. 在TextWatcher的afterTextChanged()方法中进行输入判断和处理。

下面是一个示例代码,演示了如何实现EditText只允许输入字符和数字:

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // not used
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // not used
            }

            @Override
            public void afterTextChanged(Editable s) {
                String input = editText.getText().toString();
                StringBuilder filteredInput = new StringBuilder();

                for (int i = 0; i < input.length(); i++) {
                    char c = input.charAt(i);
                    if (Character.isLetterOrDigit(c)) {
                        filteredInput.append(c);
                    }
                }

                editText.removeTextChangedListener(this);
                editText.setText(filteredInput.toString());
                editText.setSelection(filteredInput.toString().length());
                editText.addTextChangedListener(this);
            }
        });
    }
}

在上述代码中,我们首先获取到EditText的实例,并为其添加了一个TextWatcher。在TextWatcher的afterTextChanged()方法中,我们首先获取EditText的文本内容,并使用一个StringBuilder来存储过滤后的有效字符和数字。随后,我们通过移除TextWatcher、修改EditText的文本并恢复TextWatcher的方式,实现了只允许字符和数字输入的功能。

请注意,上述示例代码中的R.id.editText是一个示例EditText的id,你需要根据实际情况修改为你自己的EditText的id。

结论

通过添加TextWatcher并在afterTextChanged()方法中判断和处理输入,我们可以很容易地实现EditText只允许字符和数字输入的功能。这种方法适用于大多数情况,如果你有其他特殊的需求,可以根据具体情况进行修改。

希望本文对您有所帮助!