我已经为AppCompatButton创建了自定义可绘制对象,并且对于API级别23及更高版本来说,它的工作情况非常好。
这里是自定义可绘制的。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_shortAnimTime" android:exitFadeDuration="@android:integer/config_shortAnimTime">
<item android:drawable="@drawable/background_radio_checked" android:state_checked="true" />
<item android:drawable="@drawable/background_radio_unchecked" android:state_checked="false" />
</selector>
background_radio_checked-
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="-8dp"
android:right="-8dp"
android:top="-8dp">
<shape>
<solid android:color="#FFF1EEFF" />
<stroke
android:width="1dp"
android:color="@color/color_ask_question" />
</shape>
</item>
<item
android:bottom="@dimen/screen_margin_half"
android:drawable="@drawable/ic_add_filled_24dp"
android:gravity="start|center_vertical"
android:left="@dimen/screen_margin_half_plus_four"
android:right="@dimen/screen_margin_half"
android:top="@dimen/screen_margin_half" />
</layer-list>
background_radio_unchecked-
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="1dp"
android:color="@color/color_employer_divider" />
<solid android:color="#F2F2F2" />
<corners android:topLeftRadius="@dimen/screen_margin_half_half_half" />
</shape>
</item>
<item
android:bottom="@dimen/screen_margin_half"
android:drawable="@drawable/ic_add_empty_24dp"
android:gravity="start|center_vertical"
android:left="@dimen/screen_margin_half_plus_four"
android:right="@dimen/screen_margin_half"
android:top="@dimen/screen_margin_half" />
</layer-list>
使用的可绘制对象是SVG,高度宽度为24dp。
但是在API级别21上,同样的事情看起来很可怕。
尝试删除动画,但结果仍然相同。
不确定我在做什么或错在哪里。 似乎我正在使用某些属性,该属性仅在API 23及更高版本中不可用,但不确定哪个属性。
答案 0 :(得分:1)
我会自行回答,希望能对某人有所帮助。
我将这个可绘制对象设置为我的单选按钮的背景,并在button属性中传递了“ @null”。
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/custom_radio_button_backgorund"
android:button="@null"
android:checked="true" />
这不起作用,因此我为按钮和背景创建了两个单独的自定义可绘制对象。
对于自定义可绘制背景,我只使用了带有边框,背景颜色,半径等的形状,但没有图标。对于Button的自定义可绘制对象,我使用了图标。 在背景和按钮中分配这两个自定义可绘制对象,使它们在棒棒糖设备及更高版本中均可正常工作。
<android.support.v7.widget.AppCompatButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/custom_radio_background"
android:button="@drawable/custom_radio_button"
android:checked="true" />
-----------自定义可绘制背景-------------
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_shortAnimTime" android:exitFadeDuration="@android:integer/config_shortAnimTime">
<item android:drawable="@drawable/background_radio_checked_background" android:state_checked="true" />
<item android:drawable="@drawable/background_radio_unchecked_background" android:state_checked="false" />
</selector>
background_radio_checked_background-
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="-8dp"
android:right="-8dp"
android:top="-8dp">
<shape>
<solid android:color="#EBFFF7" />
<stroke
android:width="1dp"
android:color="#118F5D" />
</shape>
</item>
</layer-list>
background_radio_unchecked_background-
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="1dp"
android:color="@color/color_employer_divider" />
<solid android:color="#F2F2F2" />
<corners android:topRightRadius="@dimen/screen_margin_half_half_half" />
</shape>
</item>
</layer-list>
-----------按钮的自定义绘图-----------
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_shortAnimTime" android:exitFadeDuration="@android:integer/config_shortAnimTime">
<item android:drawable="@drawable/background_radio_checked_button" android:state_checked="true" />
<item android:drawable="@drawable/background_radio_unchecked_button" android:state_checked="false" />
</selector>
background_radio_checked_button-
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="@dimen/screen_margin_half"
android:drawable="@drawable/ic_poll_filled_24dp"
android:gravity="start|center_vertical"
android:left="@dimen/screen_margin_half_plus_four"
android:right="@dimen/screen_margin_half"
android:top="@dimen/screen_margin_half" />
</layer-list>
background_radio_unchecked_button-
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="@dimen/screen_margin_half"
android:drawable="@drawable/ic_poll_empty_24dp"
android:gravity="start|center_vertical"
android:left="@dimen/screen_margin_half_plus_four"
android:right="@dimen/screen_margin_half"
android:top="@dimen/screen_margin_half" />
</layer-list>
我仍然不确定为什么创建一个同时具有图标和边框/背景颜色的可绘制对象,但不适用于棒棒糖设备。
欢迎提出建议,对此解决方案进行更正。