自定义复选框图像android

Fal*_*rri 176 checkbox android

是否有一种简单的方法可以将自定义图像用于复选框?我想复制gmail的"已加星标"行为.所以我希望有一个复选框,当选中时,它是一个填充星号.当未经检查的是一颗空星.我是否必须使用imageview并自己做我自己的逻辑?

小智 274

创建一个drawable复选框选择器:

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

确保您的复选框是这样的 android:button="@drawable/checkbox_selector"

<CheckBox
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:button="@drawable/checkbox_selector"
    android:text="CheckBox"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@color/Black" />
Run Code Online (Sandbox Code Playgroud)

  • 我已经将我的项目升级到 android x 之后我无法像你在 api level 21 和 android:button 之前所说的那样自定义我的复选框。 (2认同)

Jea*_*ean 128

复选框是巴顿的孩子描述你可以只与几个国家给你的复选框的背景图像这里,下"按钮式":

...并举例在这里:

  • 谢谢,我实际上找到了我在这里需要的http://it-ride.blogspot.com/2010/04/how-to-android-favorite-button-right.html,但是我不得不这样做,如果我想要一个__real__自定义图像= P. (26认同)
  • @Orabîg:这个downvote错了.问题得到了完美回答("自定义复选框图像").此特定星号按钮存在快捷方式的事实不会使此答案无效. (8认同)
  • 谢谢.正是我一直在寻找的东西 - 我已经想出了整个州的事情,但我一直在设置android:background而不是android:按钮,而最终只有2个按钮.现在一切顺利. (2认同)

WOU*_*nes 44

将btn_check.xml从android-sdk/platforms/android - #/ data/res/drawable复制到项目的drawable文件夹,并将"on"和"off"图像状态更改为自定义图像.

然后你的xml将需要 android:button="@drawable/btn_check"

<CheckBox
    android:button="@drawable/btn_check"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:checked="true" />
Run Code Online (Sandbox Code Playgroud)

如果你想使用不同的默认android图标,你可以使用 android:button="@android:drawable/..."

  • 不好的建议。图标可能会因版本而异,甚至可能完全消失。如果你真的喜欢默认图标,你可以从来源中获取它。 (2认同)
  • 示例:对全息图标的引用将使您的应用程序在蜂窝式设备之前崩溃。这样的麻烦真的很难维护和调试。所以我通常不仅复制 xml,还复制图像,以确保找到资源的百分之一百。这对于确保 UI 在每个设备上看起来都一样非常重要。 (2认同)

小智 9

RES /抽拉/ day_selector.xml

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

RES /布局/ my_layout.xml

<CheckBox
    android:id="@+id/check"
    android:layout_width="39dp"
    android:layout_height="39dp"
    android:background="@drawable/day_selector"
    android:button="@null"
    android:gravity="center"
    android:text="S"
    android:textColor="@color/black"
    android:textSize="12sp" />
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您有Android开源代码,可以在以下位置找到样式定义:
src/frameworks/base/core/res/res/values

<style name="Widget.CompoundButton.CheckBox">
    <item name="android:background">
        @android:drawable/btn_check_label_background
    </item>
    <item name="android:button">
        ?android:attr/listChoiceIndicatorMultiple
    </item>
</style>
Run Code Online (Sandbox Code Playgroud)


ale*_*nov 5

基于 Enselic 和 Rahul 的回答。

它对我有用(API 21 之前和之后):

<CheckBox
    android:id="@+id/checkbox"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:text=""
    android:gravity="center"

    android:background="@drawable/checkbox_selector"
    android:button="@null"
    app:buttonCompat="@null" />
Run Code Online (Sandbox Code Playgroud)