【问题标题】:Mask for EditText in AndroidAndroid中EditText的掩码
【发布时间】:2020-11-11 05:03:40
【问题描述】:

我想限制 EditText 中除数字之外的所有符号的输入,“?”和 ”*”。我怎么能做到?

【问题讨论】:

标签: android android-edittext mask


【解决方案1】:

如果您的字符串也有最大严格长度,则可以使用掩码。我不确定这是正确的解决方案,但它是最简单的解决方案。在 Android Studio 的 Android 程序中使用掩码的一种简单方法是使用 MaskedEditText 库 (GitHub link)。

我不明白什么意思:数字,“?”和“”,所以我想只是“?”和“”。所以代码是:

在你的 build.gradle 中:

compile 'ru.egslava:MaskedEditText:1.0.5'

在你的布局中:

<br.com.sapereaude.maskedEditText.MaskedEditText
    android:id="@+id/phone_input"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="phone"
    android:typeface="monospace"
    mask:allowed_chars="?*"
    mask:mask="##########"
    app:keep_hint="true"
    />

此代码创建一个 EditText,它只能包含“?”和“*”,最大长度为 10。请随时提出您的问题 :-)

【讨论】:

    【解决方案2】:

    您可以通过addTextChangedListener 添加TextWatchafterTextChanged 允许你修改修改后的文本。

    (请记住,有很多方法可以修改文本字段 - 输入文本、通过 IME 自动完成、复制和粘贴)。在 TextWatch 中妥善处理。

    【讨论】:

    • 请给我一个这个方法的例子
    【解决方案3】:

    这样,我们可以限制用户不输入?和 *

    <EditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:textSize="@dimen/register_text_size"
       android:layout_weight="1"
       android:id="@+id/first_name"
       android:padding="14dp"
       android:digits="@#$%^&()_-+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12"
       android:singleLine="true"
       android:hint="@string/first_name"/>
    

    【讨论】:

      【解决方案4】:

      您可以通过edittext.addTextChangeListener 方法检查您的输入。

      etAdjustmentInput.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) {             
                   //checking the length of input 
                  if (etAdjustmentInput.getText().toString().trim().length()<=0){
                       // if length less then or equals 0 show warning or make button not clickable
                      tvAdjustmentInfoOk.setClickable(false);
                      tvAdjustmentInfoOk.setTextColor(getResources().getColor(R.color.time_color));
                  }
                  else {
      
                       // input length greater then 0 now check the input type according to your requirement 
                      tvAdjustmentInfoOk.setClickable(true);
                      tvAdjustmentInfoOk.setTextColor(getResources().getColor(R.color.colorPrimaryDark));
                      if(s.equals("?")){
                       //do your task
                        }
                      else{ // whatever you want to tell the user 
                        }
                  }
              }
      
              @Override
              public void afterTextChanged(Editable s) {
      
              }
          });
      

      onTextChanged方法中,您可以将用户限制为maximum length,也可以根据您的要求检查input type

      【讨论】:

        【解决方案5】:

        试试这个

        从此代码中您可以输入 0 到 9 位数字,并且只能输入两个特殊字符?和 *。

        <EditText
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:id="@+id/first_name"
           android:digits="?*1234567890"
           android:singleLine="true"
           />
        

        【讨论】:

        • 你能添加一个简短的描述吗?
        • 从此代码中您可以输入 0 到 9 位数字,并且只能输入两个特殊字符?和*。
        【解决方案6】:
        public class MainActivity extends Activity {
        
        private EditText editText;
        private String blockCharacterSet = "?*";
        
        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 });
        }
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-13
          • 1970-01-01
          • 2021-04-18
          • 2021-06-17
          • 2012-12-12
          • 2014-10-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多