安卓按钮背景形状

3

我想创建一个像这样的单选按钮:

enter image description here

即,选中时会显示一个勾号以表示已选择,未选中时只有橙色背景(或其他颜色)。

页面的黑色背景只是应用程序的背景。

我知道我可以为每个按钮的不同状态创建不同的可绘制图形,但是如果有很多颜色,这并不是非常可扩展的。

我正在考虑将勾号图像添加为android:button属性的可绘制图像,并为单选按钮提供不同的android:background颜色。 但是,由于背景的形状始终是正方形,因此它无法很好地工作。所以我最终得到了一个方形按钮。

如何实现这样的按钮? 或者,如何更改背景形状为圆形/椭圆形而不是正方形?

这是我目前拥有的:

<!-- layout.xml -->
<RadioButton
    android:id="@+id/radio1"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:background="@color/orange"
    android:button="@drawable/radio"/>

<!-- drawable/radio.xml -->
<item 
    android:state_checked="true" 
    android:drawable="@drawable/checkmark_on_oval"
    >
</item>    

我认为你最好使用一对PNG,通过状态列表可绘制来设置:https://dev59.com/a2cs5IYBdhLWcg3w-Yv4#12432722 - Phantômaxx
@Vyger 谢谢。但我在想是否有更好的方法来做这件事。使用一堆PNG并不理想。如果没有其他选择,我才会采用这种方式。 - louis.luo
一堆……只需要2个。已选和未选。你看:问题在于“勾号”。如果你想要一个白色的“点”,可以使用xml drawable实现。 - Phantômaxx
@Vyger 我可以为圆形勾选标记创建2个PNG,但是如何设置背景颜色呢?现在,它显示为正方形背景上的勾选标记。 - louis.luo
你可以将圆形外的部分设置为透明...不过,似乎@Lal有更好的解决方案。 - Phantômaxx
显示剩余2条评论
2个回答

3
尝试以下内容可能对您有所帮助。 将单选按钮属性放置在以下位置:
    <RadioButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:button="@null"
        android:checked="true"
        android:drawableLeft="@drawable/radio_button_selector"
        android:drawablePadding="5dp"
        android:paddingLeft="2dp" />

在drawable文件夹中添加rb_drawable.xml文件。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/radio_button_unchecked" android:state_checkable="true"/> <!-- pressed -->
    <item android:drawable="@drawable/radio_button_checked" android:state_checked="true"/> <!-- focused -->
    <item android:drawable="@drawable/radio_button_unchecked"/> <!-- default -->

</selector>

这里的radio_button_uncheckedradio_button_checked是用于您的单选按钮的两个图像。


1
你可以使用以下代码创建一个圆形。
<?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
         <solid android:color="#9F2200"/>
         <stroke android:width="2sp" android:color="#fff" />
     </shape>

尝试一下...

这里的问题是“勾选标记”:如何使用形状创建它? - Phantômaxx
请使用此圆形图形作为“Radiobutton”的背景,并使用png格式的图片作为“button”选框的勾选标记。 - Lal
所以说,最终你还是使用了PNG格式的文件...好的。 - Phantômaxx
据我所知,没有其他方式... ;) - Phantômaxx
哈哈,有趣。我也不知道其他方法。如果我的回答对你有帮助,请给我点赞。 - Lal
@Lai 谢谢。所以,如果我有5个不同颜色的单选按钮,我需要创建5个这样的形状,对吗? - louis.luo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接