我的应用正在访问EditTexts的InputType
值。有时会产生意外行为。深入研究这个问题,我发现了一些看起来不受欢迎的行为:
TYPE_TEXT_VARIATION_PASSWORD
(0x80)& TYPE_TEXT_VARIATION_FILTER
(0xb0)== 0x80 == TYPE_TEXT_VARIATION_PASSWORD
,即如果字段中包含TYPE_TEXT_VARIATION_FILTER
,则TYPE_TEXT_VARIATION_PASSWORD
似乎不正确。但是,bitwise and
(&)应该用于检查标记,因为输入类型通常使用|
进行组合,如https://developer.android.com/reference/android/text/InputType.html 这是Android API的弱点吗?或者我理解这完全错了吗?
答案 0 :(得分:1)
显然,示例中几个值与|
的组合仅结合了类,变体和标志,但从不会有多种变体。给定某种类型,这也区分TYPE_NUMBER_VARIATION_PASSWORD,TYPE_TEXT_VARIATION_URI和TYPE_DATETIME_VARIATION_DATE。
因此,访问这些值的正确方法是检查某个类,然后使用(inputType & TYPE_MASK_VARIATION) == inputTypeToCheckFor
检查变体。