微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android StateListDrawable 不会更改为 state_pressed

如何解决Android StateListDrawable 不会更改为 state_pressed

我有一个自定义的 drawable,有 3 种状态(按下、选择和认)。 在 Android Studio 预览中切换状态时,按下状态不会触发可绘制对象的任何更改。选定状态按预期工作。 我在聚焦状态下也经历过这种行为,state_checked 似乎正在工作。 在我为测试目的创建的另一个 drawable 中,一切都按预期工作,即使状态的顺序完全相同。

具有错误行为的自定义可绘制对象:

<item android:state_pressed="true">
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

        <item>
            <ripple xmlns:android="http://schemas.android.com/apk/res/android"
                android:color="@color/sev_ripple_color">
                <item>

                    <shape android:shape="rectangle">
                        <solid android:color="@android:color/white" />
                        <corners android:radius="10dp" />
                    </shape>
                </item>
            </ripple>
        </item>

        <item>
            <ripple xmlns:android="http://schemas.android.com/apk/res/android"
                android:color="@color/sev_ripple_color">
                <item>
                    <shape android:shape="rectangle">
                        <padding android:bottom="@dimen/sev_margin_xsmall"
                            android:top="@dimen/sev_margin_xsmall"
                            android:left="@dimen/sev_margin_xsmall"
                            android:right="@dimen/sev_margin_xsmall" />
                        <stroke
                            android:width="2dp"
                            android:color="@color/sev_btn_color_primary" />
                        <solid android:color="@android:color/white" />
                        <corners android:radius="10dp" />
                    </shape>
                </item>
            </ripple>
        </item>

        <item android:drawable="@drawable/ic_sev_male" android:top="20dp" android:bottom="20dp" android:start="30dp" android:end="30dp" android:gravity="center">
        </item>
    </layer-list>
</item>

<item android:state_selected="true">
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

        <item>
            <ripple xmlns:android="http://schemas.android.com/apk/res/android"
                android:color="@color/sev_ripple_color">
                <item>

                    <shape android:shape="rectangle">
                        <solid android:color="@android:color/white" />
                        <corners android:radius="10dp" />
                    </shape>
                </item>
            </ripple>
        </item>

        <item>
            <ripple xmlns:android="http://schemas.android.com/apk/res/android"
                android:color="@color/sev_ripple_color">
                <item>
                    <shape android:shape="rectangle">
                        <padding android:bottom="@dimen/sev_margin_xsmall"
                            android:top="@dimen/sev_margin_xsmall"
                            android:left="@dimen/sev_margin_xsmall"
                            android:right="@dimen/sev_margin_xsmall" />
                        <stroke
                            android:width="2dp"
                            android:color="@color/sev_btn_color_primary" />
                        <solid android:color="@android:color/white" />
                        <corners android:radius="10dp" />
                    </shape>
                </item>
            </ripple>
        </item>

        <item android:drawable="@drawable/ic_sev_male" android:top="20dp" android:bottom="20dp" android:start="30dp" android:end="30dp" android:gravity="center">
        </item>
    </layer-list>
</item>

<item>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

        <item>
            <ripple xmlns:android="http://schemas.android.com/apk/res/android"
                android:color="@color/sev_ripple_color">
                <item>

                    <shape android:shape="rectangle">
                        <solid android:color="@android:color/white" />
                        <corners android:radius="10dp" />
                    </shape>
                </item>
            </ripple>
        </item>

        <item>
            <ripple xmlns:android="http://schemas.android.com/apk/res/android"
                android:color="@color/sev_ripple_color">
                <item>
                    <shape android:shape="rectangle">
                        <padding android:bottom="@dimen/sev_margin_xsmall"
                            android:top="@dimen/sev_margin_xsmall"
                            android:left="@dimen/sev_margin_xsmall"
                            android:right="@dimen/sev_margin_xsmall" />
                        <stroke
                            android:width="2dp"
                            android:color="#CCCCCC" />
                        <solid android:color="@android:color/white" />
                        <corners android:radius="10dp" />
                    </shape>
                </item>
            </ripple>
        </item>

        <item android:drawable="@drawable/ic_sev_male" android:top="20dp" android:bottom="20dp" android:start="30dp" android:end="30dp" android:gravity="center">
        </item>

    </layer-list>
</item>

具有相同顺序和正确行为的自定义可绘制:

<!-- Todo Redundanz prüfen,ändert sich ja nur checkBox state -->

<item android:state_pressed="true">

    <shape android:shape="rectangle">
        <solid android:color="@android:color/holo_blue_bright" />
    </shape>
</item>

<item android:state_selected="true">

    <shape android:shape="rectangle">
        <solid android:color="@android:color/white" />
    </shape>
</item>

<item>

    <shape android:shape="rectangle">
        <solid android:color="@android:color/red" />
    </shape>
</item>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。