android - Android StateListDrawable 未更改为 state_pressed
问题描述
我有一个具有 3 种状态(按下、选择和默认)的自定义可绘制对象。在 Android Studio 预览中切换状态时,按下状态不会触发对可绘制对象的任何更改。选定的状态按预期工作。我在专注状态下也经历过这种行为, state_checked 似乎正在工作。在我为测试目的创建的另一个绘图中,一切都按预期工作,即使状态的顺序完全相同。
具有错误行为的自定义可绘制对象:
<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>
解决方案
推荐阅读
- c# - 在 Xamarin 值转换器中使用文本字符串作为绑定参数
- css - Laravel 网址问题
- javascript - 如何解决跨域读取阻塞 (CORB) 阻止的跨域响应和跨域错误
- bash - 我对这个 bash 脚本行感到困惑
- react-redux - 关于 react-redux 文档的问题
- python - 如何使用 python 让 ubuntu 操作系统进入睡眠状态?
- node.js - 存储和查询具有多个相关实体的 PostgreSQL 数据库实体?
- postgresql - 结合两个整数值生成月份和出生年份,用“/”分隔
- css - 如何覆盖基础小、中、大断点值?
- angular - 如何从过滤器内的输入中获取值