【问题标题】:Edittext inputtype constant value doesnot matchEdittext inputtype 常量值不匹配
【发布时间】:2014-01-13 21:19:12
【问题描述】:

在android xml文件中使用editext作为

<EditText
  android:id="@+id/email"
  android:layout_width="fill_parent"
  android:layout_height="33dp"
  android:inputType="textEmailAddress"
  android:hint="Enter your mail id" />

在验证该editext时在java文件中。

if(editextobj.getInputType()==InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS){

}

if(getInputType()==(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS)){

}

此条件不起作用,因为 editextobj.getInputType() 返回 33 而开发人员文档将 TYPE_TEXT_VARIATION_EMAIL_ADDRESS 的常量值设为 32

如何以编程方式验证 inputype?

【问题讨论】:

  • 有趣的解决方案:: 使用editextobj.getInputType() -1
  • @saa editextobj.getInputType() -1 仅在某些情况下有效。

标签: android validation android-layout android-edittext


【解决方案1】:

发生以下情况:
InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS 值为:32。
InputType.TYPE_CLASS_TEXT 值为:1。

(|) 是按位或运算。它正在二进制级别进行修改:

十进制: 32|1 得到 33
二进制: 100000|1 得到 100001,即十进制的 33。

editextobj.getInputType() 值为 33

【讨论】:

    【解决方案2】:

    您的代码没有问题。 TYPE_TEXT_VARIATION_EMAIL_ADDRESS 入住 32 次。它也是一个标志,所以你应该像这样测试它。有关详细信息,请参阅InputType 示例(在顶部的类概述下)。

    if(editextobj.getInputType() & InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS == 1){
    
    }
    

    【讨论】:

      【解决方案3】:

      您需要分别测试每个标志,例如:

      if ( ( editextobj.getInputType() & InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) != 0)
      {
           // This is an email address!
      }
      

      【讨论】:

        【解决方案4】:

        试试这个:

        if(editextobj.getInputType() == (InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS + 1)) {....}
        

        【讨论】:

          猜你喜欢
          • 2011-02-12
          • 1970-01-01
          • 1970-01-01
          • 2011-07-01
          • 1970-01-01
          • 2011-04-27
          • 1970-01-01
          • 2010-09-08
          相关资源
          最近更新 更多