Nitro's

Oct 30, 2016 - Comments - tech dev

Android TextInputLayout升级后的坑

Google自从推出全平台的Material Design的设计风格以来,各位大神都贡献了很多符合这一风格的custom组件,直到Android官方的design支持库推出,大家对Material的追捧简直是蜂拥而上。

之前有用过其他自定义的EditText,但是design的TextInputEditText更好的支持了Error、Hint和Material风格,遂用上。

代码如下:

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone">
    
        <android.support.design.widget.TextInputEditText
            android:id="@+id/code"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/code"
            android:inputType="text"
            android:textSize="14sp" />
</android.support.design.widget.TextInputLayout>

TextInputLayout在使用时默认visibility=gone,运行时根据逻辑置为visible或者gone,当在Java代码中操作时是通过id=code的TextInputEditText来操作(getParent())父组件TextInputLayout的。

在design support version=25.0.0之前,一切都正常,setVisibility都能正常操纵父组件,但升级之后一切失效了,WHAT!?WHY!?。

通过DEBUG才发现,TextInputLayput做出了更改,添加对密码显示隐藏的支持,在Java代码中又增加了一层FrameLayout导致通过getParent()获取到的并不是TextInputLayput组件。

最新TextInputLayout的源代码更改,移步

问题还是归因于正确(非怪异???)的使用组件~

Tags: android

Android Data Binding代码分析 山后-零壹

comments powered by Disqus