在android中添加自定义单选按钮

Dev*_*ath 112 xml android

我试图获得android中常规按钮的radiobutton效果

我在下面有一个简单的android单选按钮

在此输入图像描述

代码是 ::

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" >

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="RadioButton1" />

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="RadioButton2" />

        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="RadioButton3" />
    </RadioGroup>


</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

如何自定义如下::

在此输入图像描述

谢谢!

[编辑]使用其中一个答案的代码

在此输入图像描述

但是按钮名称被选择选项如何删除它所掩盖?


{编辑}更多变化

Finall的更改至少应该知道我从三个单选按钮中选择了哪个按钮....是否可以获得如下所示?

在此输入图像描述

Eva*_*hir 229

添加引用图像或选择器(如下所示)的背景drawable,并使按钮透明:

<RadioButton
    android:id="@+id/radio0"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/yourbuttonbackground"
    android:button="@android:color/transparent"
    android:checked="true"
    android:text="RadioButton1" />
Run Code Online (Sandbox Code Playgroud)

如果您希望单选按钮在选中时具有不同的资源,请创建选择器背景drawable:

RES /抽拉/ yourbuttonbackground.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/b"
        android:state_checked="true"
        android:state_pressed="true" />
    <item
        android:drawable="@drawable/a"
        android:state_pressed="true" />
    <item
        android:drawable="@drawable/a"
        android:state_checked="true" />
    <item
        android:drawable="@drawable/b" />
</selector>
Run Code Online (Sandbox Code Playgroud)

在上面的选择器中,我们引用了两个drawable,a以及b我们如何创建它们:

res/drawable/a.xml - 选定状态

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <corners
        android:radius="5dp" />
    <solid
        android:color="#fff" />
    <stroke
        android:width="2dp"
        android:color="#53aade" />
</shape>
Run Code Online (Sandbox Code Playgroud)

res/drawable/b.xml - 常规状态

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <corners
        android:radius="5dp" />
    <solid
        android:color="#fff" />
    <stroke
        android:width="2dp"
        android:color="#555555" />
</shape>
Run Code Online (Sandbox Code Playgroud)

有关drawables的更多信息,请访问:http://developer.android.com/guide/topics/resources/drawable-resource.html

  • @Unicorn是的,我理解.您需要做的就是创建一个可绘制的选择器,就像我在答案中所说的那样.你会创建两个drawable.一个用于常规按钮样式,另一个用于按下按钮样式.我将使用这些drawable的代码更新我的答案. (3认同)
  • RadioButton的正常行为,您在寻找复选框吗? (3认同)
  • @Unicorn添加`android:button ="@ android:color/transparent"`删除它. (2认同)

Ses*_*lyn 41

使用Evan答案中的相同XML文件格式,但只需要一个可绘制文件即可进行格式化.

<RadioButton
    android:id="@+id/radio0"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/custom_button_background"
    android:button="@android:color/transparent"
    android:checked="true"
    android:text="RadioButton1" />
Run Code Online (Sandbox Code Playgroud)

和你的单独的drawable文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:state_pressed="true" >
         <shape android:shape="rectangle" >
             <corners android:radius="3dip" />
             <stroke android:width="1dip" android:color="#333333" />
             <solid android:color="#cccccc" />            
         </shape>
    </item>

    <item android:state_checked="true">
         <shape android:shape="rectangle" >
             <corners android:radius="3dip" />
             <stroke android:width="1dip" android:color="#333333" />
             <solid android:color="#cccccc" /> 
         </shape>
    </item>  

    <item>
         <shape android:shape="rectangle"  >
             <corners android:radius="3dip" />
             <stroke android:width="1dip" android:color="#cccccc" />
             <solid android:color="#ffffff" />            
         </shape>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)


Pra*_*ani 31

我已经更新了接受的答案并删除了不必要的内容。

我已经为下面的图像创建了XML。

在此处输入图片说明

您的XML代码RadioButton将为:

<RadioGroup
        android:id="@+id/daily_weekly_button_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">


        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="@dimen/_80sdp"
            android:gravity="center"
            android:layout_height="wrap_content"
            android:background="@drawable/radio_flat_selector"
            android:button="@android:color/transparent"
            android:checked="true"
            android:paddingLeft="@dimen/_16sdp"
            android:paddingTop="@dimen/_3sdp"
            android:paddingRight="@dimen/_16sdp"
            android:paddingBottom="@dimen/_3sdp"
            android:text="Daily"
            android:textColor="@color/radio_flat_text_selector" />

        <RadioButton
            android:id="@+id/radio1"
            android:gravity="center"
            android:layout_width="@dimen/_80sdp"
            android:layout_height="wrap_content"
            android:background="@drawable/radio_flat_selector"
            android:button="@android:color/transparent"
            android:paddingLeft="@dimen/_16sdp"
            android:paddingTop="@dimen/_3sdp"
            android:paddingRight="@dimen/_16sdp"
            android:paddingBottom="@dimen/_3sdp"
            android:text="Weekly"
            android:textColor="@color/radio_flat_text_selector" />

</RadioGroup>
Run Code Online (Sandbox Code Playgroud)

radio_flat_selector.xml 对于背景选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/radio_flat_selected" android:state_checked="true" />
    <item android:drawable="@drawable/radio_flat_regular" />
</selector>
Run Code Online (Sandbox Code Playgroud)

radio_flat_selected.xml 对于所选按钮:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:radius="1dp"
        />
    <solid android:color="@color/colorAccent" />
    <stroke
        android:width="1dp"
        android:color="@color/colorAccent" />
</shape>
Run Code Online (Sandbox Code Playgroud)

radio_flat_regular.xml 对于常规选择器:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="1dp" />
    <solid android:color="#fff" />
    <stroke
        android:width="1dp"
        android:color="@color/colorAccent" />
</shape>
Run Code Online (Sandbox Code Playgroud)

以上所有3个文件代码均位于drawable/文件夹中。

现在我们还需要Text颜色选择器来相应地更改文本的颜色。

radio_flat_text_selector.xml 用于文本颜色选择器

color/为此文件使用文件夹。)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorAccent" android:state_checked="false" />
    <item android:color="@color/colorWhite" android:state_checked="true" />
</selector>
Run Code Online (Sandbox Code Playgroud)

注意:对于这种类型的解决方案,我参考了很多答案,但是没有找到好的解决方案,所以我做到了。

希望对您有帮助。

谢谢。

  • @ AdamMc331,您将必须创建 3 个选择器,一个用于行首的按钮,一个用于中间的按钮,另一个用于最后一个,然后您可以调整并仅将其中一个圆角边缘,如果将 &lt;shape&gt; 包裹在 &lt;layer-list&gt; 内的 &lt;item&gt; 内,还可以用负标记隐藏其中一个 (2认同)
  • 如何创建颜色/文件夹?你能帮我么 (2认同)

flc*_*aux 8

必须使用XML可绘制路径(my_checkbox)填充"CompoundButton"类的"Button"属性.在XML drawable中,您必须具有:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_checked="false" android:drawable="@drawable/checkbox_not_checked" />
     <item android:state_checked="true" android:drawable="@drawable/checkbox_checked" />
     <item android:drawable="@drawable/checkbox_not_checked" /> <!-- default -->
</selector>
Run Code Online (Sandbox Code Playgroud)

不要忘了更换my_checkbox您的复选框绘制的文件名,checkbox_not_checked你PNG绘制这是您的复选框时它不检查,checkbox_checked当它与检查你的形象.

对于大小,直接更新布局参数.


小智 7

设置android:background和设置android:buttonRadioButton之类的已接受答案对我不起作用。可绘制图像被显示为android:button单选按钮文本的背景(尽管被设置为transparent)在此处输入图片说明

android:background="@drawable/radiobuttonstyle"
    android:button="@android:color/transparent"
Run Code Online (Sandbox Code Playgroud)

因此将radiobutton作为自定义可绘制的radiobuttonstyle.xml

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:checked="true"
    android:text="Maintenance"
    android:id="@+id/radioButton1"
    android:button="@drawable/radiobuttonstyle"
      />
Run Code Online (Sandbox Code Playgroud)

和radiobuttonstyle.xml如下

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="true" android:drawable="@drawable/ic_radio_checked"></item>
  <item android:state_checked="false" android:drawable="@drawable/ic_radio_unchecked"></item>
</selector>
Run Code Online (Sandbox Code Playgroud)

在此具有自定义按钮样式的单选按钮起作用之后。

在此处输入图片说明


McX*_*McX 5

为了隐藏默认的单选按钮,我建议删除该按钮而不是使其透明,因为所有视觉反馈均由可绘制背景处理:

android:button="@null"
Run Code Online (Sandbox Code Playgroud)

另外,最好使用样式,因为有几个单选按钮:

<RadioButton style="@style/RadioButtonStyle" ... />

<style name="RadioButtonStyle" parent="@android:style/Widget.CompoundButton">
    <item name="android:background">@drawable/customButtonBackground</item>
    <item name="android:button">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)

您还需要Seslyn customButtonBackground可绘制对象


小智 5

添加自定义drawable的最佳方法是:

<RadioButton
    android:id="@+id/radiocar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@android:color/transparent"
    android:button="@drawable/yourbuttonbackground"
    android:checked="true"
    android:drawableRight="@mipmap/car"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:text="yourtexthere"/>
Run Code Online (Sandbox Code Playgroud)

此处删除了自定义可绘制对象的阴影覆盖。