【问题标题】:Specify the number of characters in edit text in android在android中指定编辑文本中的字符数
【发布时间】:2012-10-06 12:58:21
【问题描述】:

我有一个关于如何限制 android 中 edit text 中的字符数的小技巧。例如,我想为名称字段设置 10 个字符的限制,因此它不允许用户输入超过 10 个字符。

另外,我在为文本指定inputtype 时遇到了另一个问题,我知道android:inputType="text|textPersonName" 的过程,但它不起作用,因为它允许用户输入字符、数字和特殊字符。

非常感谢您的帮助。

提前致谢

【问题讨论】:

    标签: android layout android-edittext


    【解决方案1】:

    使用以下 xml 属性设置允许的最大字符和位数

    android:digits
    android:maxLength
    

    例如:

    <EditText
    android:id="@+id/et_name"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:digits="abcdefghijklmnopqrstuvwxyz ."
    android:maxLength="10" />
    

    这里,这只允许小写字母、空格和点 (.)

    更新

    通过java设置过滤器

    InputFilter myFilter = new InputFilter() { 
            public CharSequence filter(CharSequence source, int start, int end, 
    Spanned dest, int dstart, int dend) { 
                    for (int i = start; i < end; i++) { 
    
    
                            if (!Character.isLetter(source.charAt(i))) { 
                                    return ""; 
                            } 
    
                            if (i == start) {
                               return source.toUpperCase();
                            }
    
                    } 
                    return source; 
            } 
    }; 
    
    edit.setFilters(new InputFilter[]{myFilter}); 
    

    【讨论】:

    • 哦,它适用于数字属性,但有没有办法让第一个字母大写,其余的小写?
    • 不可能在 xml 中执行,您已设置过滤器,请参阅更新的答案。
    • 我确实听过你说的,但我在返回 source.toUpperCase 时遇到错误; toUpperCase 下的错误
    • 检查更新的答案。使用 source.toUpperCase();而不是 source.toUpperCase;,如果再次返回任何错误发布错误日志
    • @ZiZo 使用source.toString().toUpperCase(); 作为源是CharSequence 类型,toUpperCase() 可用于String 类型值。
    【解决方案2】:
    android:maxLength="10"
    

    这对我有用。

    【讨论】:

      【解决方案3】:

      试试这个:

      android:maxLength="10"
      

      在 XML 文件的 EditText 中。

      【讨论】:

      • 非常感谢,这是完美的工作。但是输入类型的文本呢,你知道怎么解决吗?
      【解决方案4】:

      首先你要做的是写:

      android:maxLength="10"
      

      就你的第二个问题而言,只写 textPersonName 就足够了

      android:inputType="textPersonName" 
      

      这里引用input type

      只有在以编程方式执行时才需要使用位标志,这对应于:

       setInputType(InputType.TYPE_CLASS_TEXT  | InputType. TYPE_TEXT_VARIATION_PERSON_NAME);
      

      【讨论】:

      • 我认为将你的xml修改为android就足够了:inputType="textPersonName" 它真的不需要通过代码来完成
      • 如果你真的想通过代码来做,你必须在你从xml中获取你的edittext之后再做:EditText editText = (EditText) findViewById(R.id.yourEditText); editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME);
      • 当我使用这个属性 android:inputType="textPersonName" 当模拟器运行时,它允许用户输入字母、数字和特殊字符。但是当我使用您提供的代码行时,我在第二行出现错误,即 editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME); setInputType 下的红线,“|”和“。”
      【解决方案5】:

      用于设置您应该使用的字符数的限制,因为已经发布了

      android:maxLength="10"
      

      在 XML 文件的 EditText 中。如果您希望用户仅限于字母,那么您将必须在 JAVA 代码中创建一个自定义输入过滤器,如下所示

      InputFilter filter = new InputFilter() { 
              public CharSequence filter(CharSequence source, int start, int end, 
      Spanned dest, int dstart, int dend) { 
                      for (int i = start; i < end; i++) { 
                              if (!Character.isLetter(source.charAt(i))) { 
                                      return ""; 
                              } 
                      } 
                      return null; 
              } 
      }; 
      
      edit.setFilters(new InputFilter[]{filter}); 
      

      代码取自here

      【讨论】:

      • 哦,这很完美,但是对于我必须将其放置以便仅应用于人名的编辑文本的过滤器代码?
      • 在我的最后一行edit.setFilters(new InputFilter[]{filter});我将过滤器设置为名为 edit 的 EditText。同样,您将过滤器放在 EditText 上。
      • 错误是令牌“setFilters”上的语法错误,= 预期在此令牌之后
      • 你需要写“edit.setFilters(new InputFilter[]{filter});”其中“edit”是您的 EditText 的名称。编辑=(编辑文本)findViewById(R.id.editText1); edit.setFilters(new InputFilter[]{filter});
      • 好的,它工作得很好,但它不适用于 maxLength,因为它允许用户输入他想要的任意数量的字符。有什么帮助吗?
      【解决方案6】:

      android工作中手机号码第一个字符只有7、8、9位数字开头

      源代码

      https://drive.google.com/open?id=0BzBKpZ4nzNzUQkU3S25fcXV4cEE

      在 android 中编辑文本中的第一个字母以 7,8,9 开头

      package com.keshav.mobilenumberrestriction_1_6_digits;
      
      import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      import android.text.Editable;
      import android.text.InputFilter;
      import android.text.Spanned;
      import android.text.TextWatcher;
      import android.widget.EditText;
      
      public class MainActivity extends AppCompatActivity {
      
          EditText et_mobile_feedback;
          String blockCharacterSet = "1234560";
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              et_mobile_feedback = (EditText) findViewById(R.id.et_mobile_feedback);
      
              et_mobile_feedback.setFilters(new InputFilter[] { filter });
      
              et_mobile_feedback.addTextChangedListener(new TextWatcher() {
      
                  public void afterTextChanged(Editable s) {
                      // you can call or do what you want with your EditText here
                  }
      
                  public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
      
                  public void onTextChanged(CharSequence s, int start, int before, int count) {
                      if(et_mobile_feedback.getText().toString().length()==0)
                          blockCharacterSet="1234560";
                      else
                          blockCharacterSet="";
                      if(et_mobile_feedback.getText().toString().length()==10)
                          blockCharacterSet="1234567890";
                  }
              });
          }
          private InputFilter filter = new InputFilter() {
      
              @Override
              public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
      
                  try {
                      if (source != null && blockCharacterSet.contains("" + source.charAt(0))) {
                          return "";
                      }
                  }catch (StringIndexOutOfBoundsException e){
      
                  }
                  return null;
              }
          };
      }
      
          <EditText
              android:id="@+id/et_mobile_feedback"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_marginTop="5dp"
              android:editable="true"
              android:fontFamily="sans-serif"
              android:gravity="top"
              android:hint="Mobile"
              android:textColor="@color/colorPrimary"
              android:inputType="number"
              android:maxLength="10"
              android:padding="15dp"
              android:paddingLeft="10dp"
              android:paddingRight="10dp"
              android:paddingTop="10dp"
              android:singleLine="true">
      

      【讨论】:

        【解决方案7】:

        xml 中的简单方法:

        如果您需要在编辑文本中设置 4 个字符,请使用此

        android:maxLength="4"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-03
          • 1970-01-01
          • 2012-10-26
          • 2017-05-23
          相关资源
          最近更新 更多