现象:相同ID的两个layout view,style配置互相覆盖

        最近被报了一个bug,说是一个图标按钮的colorFilter属性本来不该为true的,但实际却总是为true。

         自定义属性的相关语句如下:

		mIsColorFilter = typedArray.getBoolean(R.styleable.RightTextImageView_need_color_filter, true);

       可以看到这个值按理应从layout文件中获取,如果用户没有设置,则默认为true。

       但通过检查layout文件中的属性设置,发现出问题的图标layout中,引用了一个style,在style中该属性为false,而同一列中其他图标(使用的是同一个自定义view)也使用了该style文件,也能正常呈现为false的状态。也就是说,只有出问题的那个图标没有正常应用到style文件中的false属性。

        <LinearLayout
            android:gravity="center_vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <cn.wps.moffice.common.beans.RightTextImageView
                android:id="@+id/item_edit"
                style="@style/pdf_toolbar_icon_edit_text_image"
                android:drawableLeft="@drawable/pad_pdf_text_edit_icon"
                android:text="@string/pdf_text_edit"
                android:visibility="gone"/>

            <TextView
                android:id="@+id/edit_limit_free_btn"
                style="@style/limit_free_btn_style"
                android:layout_height="match_parent"
                android:layout_marginStart="-4dp"
                android:layout_marginEnd="10dp"
                android:gravity="center"
                android:visibility="gone"
                tools:background="@color/premium_red"
                tools:visibility="visible" />
        </LinearLayout>


        <LinearLayout
            android:gravity="center_vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <cn.wps.moffice.common.beans.RightTextImageView
                android:id="@+id/item_image"
                style="@style/pdf_toolbar_icon_edit_text_image"
                android:drawableLeft="@drawable/pad_pdf_image_edit_icon"
                android:text="@string/pdf_image_edit"
                android:visibility="gone" />

            <TextView
                android:id="@+id/image_limit_free_btn"
                android:gravity="center"
                style="@style/limit_free_btn_style"
                android:visibility="gone"
                android:layout_marginStart="-4dp"
                android:layout_marginEnd="10dp"
                tools:background="@color/premium_red"
                tools:visibility="visible" />
        </LinearLayout>
……
        <item name="android:background">@drawable/pad_pdf_titlebar_item_icon_text_selector</item>
        <item name="need_color_filter">false</item>
        <item name="android:paddingBottom">0dp</item>
……

        那问题应该就出在控件初始化时的问题了,通过debugger和打log,输出这个自定义控件的所有被创建对象的属性,也发现这个id的对象和其他不同,其他都能正常为false,只有它为默认值true(或被设为true)。

       于是搜索所有这个id的控件,发现有两处地方有以此命名的控件,并分别使用了不同的style,其他一个style没有设置colorFilter属性,从而导致覆盖了使用了默认值。在更换成同样的style后问题解决了。

        //todo:需要继续跟进的一些想法:

        1、是否不同layout、不同view、使用相同UI View的类的条目,设置了相同的id后,只会胜场一个对象?

       2、是否相同id的条目,属性会互相覆盖?从而导致了这类问题?

        但按照这次的事件来说,id设置为非唯一,似乎并不妥当,也是以后要注意的一个点       

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值