【问题标题】:EditText which accepts only a few charactersEditText 只接受几个字符
【发布时间】:2016-07-01 19:48:21
【问题描述】:

我需要在 Android 上实现一个EditText,它只接受特定范围的字符,即:“S,A,Q,W,R,B,C,D,E,U”。

【问题讨论】:

  • "edittext 不应接受任何其他字符,除了在 android 中给出字符。"你这是什么意思???
  • 你想让你的编辑文本只接受来自这些字符“S,A,,B,C,D,E,U”的字符吗???
  • edittext 不应接受 android 中给定字符以外的任何其他字符。我需要java代码。

标签: java android xml android-layout android-edittext


【解决方案1】:

在你的EditText中使用这两个属性怎么样

android:maxLength="1"
android:digits = "SABCDEU"

【讨论】:

  • 这不会导致预期的行为。见this gif。 fooF 导致不输入任何文本,而 FooF 只输入 F 一次。似乎这仅在您键入的第一个字符是请求的字符时才有效。如果您以不允许的开头,则不会输入任何文本。 (这是maxLength="1"digits="TF"
  • 我刚刚找到了解决上述问题的方法。如果你设置android:inputType="textNoSuggestions"这个问题就解决了,可以使用Shree的代码
【解决方案2】:

只需使用属性android:maxLength="1",这将只允许输入一个字符来编辑文本。

您可以使用android:digits 属性并在XML 本身中指定对您来说有效的字符。

 <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:digits = "SABCDEU"
        android:maxLength="1" >

【讨论】:

    【解决方案3】:

    你应该使用 InputFilters

    edittext.setFilters(new InputFilter[] {
    new InputFilter() {
        public CharSequence filter(CharSequence src, int start,
                int end, Spanned dst, int dstart, int dend) {
            if(src.toString().matches("[a-zA-Z ]+")){
                return src;
            }
            return "";
        }
    }});
    

    【讨论】:

      【解决方案4】:

      是的,如下:

      <EditText
          android:id="@+id/editText1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:inputType="text"
          android:digits="SABCDEU"
          android:maxLength="1" > 
      

      【讨论】:

        【解决方案5】:

        如果你想设置edittext应该接受的最大字符数,那么使用这个:

         android:maxLength="1" 
        

        如果你想设置edittext应该接受的特定字符,那么使用这个:

        android:digits = "character you want to accept"
        

        在你的情况下:

        android:digits = "SABCDEU"
        

        这里请注意,edittext 将不接受数字字符、空格、小写和大写,除了 SABCDEU。如果您想进入edittext,您必须将所有字符放入android:digits=""

        【讨论】:

          【解决方案6】:

          只需在您的 Java 中添加这段代码

           public class MainActivity extends Activity {
          
              private EditText editText;
          
              private String blockCharacterSet = "~#^|$%&*!FGHIJKLMOPTWXYZ";
          
              private InputFilter filter = new InputFilter() {
          
                  @Override
                  public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
          
                      if (source != null && blockCharacterSet.contains(("" + source))) {
                          return "";
                      }
                      return null;
                  }
              };
          
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_main);
                  editText = (EditText) findViewById(R.id.editText);
                  editText.setFilters(new InputFilter[] { filter });
              }
          
          }
          

          这会给你你想要的。这将让您只选择“S,A,Q,W,R,B,C,D,E,U”。

          【讨论】:

            【解决方案7】:

            使用此代码,它只允许字符

            <EditText 
            android:inputType="text" 
            android:digits="SAQWRBCDEU"
            android:hint="Only letters allowed" />
            

            【讨论】:

            • 请编辑更多信息。不建议使用纯代码和“试试这个”的答案,因为它们不包含可搜索的内容,也没有解释为什么有人应该“试试这个”。
            猜你喜欢
            • 2013-02-19
            • 1970-01-01
            • 2014-06-06
            • 2012-03-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-02
            • 1970-01-01
            相关资源
            最近更新 更多