Android 开发——自定义的类似于具有 checkbox 功能的 view

本文介绍了一种自定义的选择Group视图实现方法,通过XML布局文件和Java类结合,实现了美观的选择效果,并支持单选或多选功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如下图,这是一组自定义的选择 group 。

左边为 group 中没有 item 被选择,右边 group 中是有一个 item 被选择,item 被选择时的 style 如上图显示,这个自定义 view 比 checkbox 更美观。

选择 group 中的一个 item 的布局如下(check_item.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="11dp"
        android:layout_marginHorizontal="5dp"
        android:id="@+id/item"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:clickable="true">

        <TextView
            android:id="@+id/item_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="9dp"
            android:paddingVertical="10dp"
            android:layout_gravity="right"
            android:gravity="center"
            android:text="餐前"
            android:textColor="@color/light_black"
            android:textSize="12dp"
            android:background="@drawable/item_corners_view"
            android:duplicateParentState="true"/>

        <ImageView
            android:id="@+id/item_imageview"
            android:layout_marginRight="9dp"
            android:layout_width="18dp"
            android:layout_height="18dp"
            android:layout_gravity="right"
            android:background="@drawable/item_image"
            android:visibility="invisible"
            android:duplicateParentState="true"/>

    </FrameLayout>

利用 FrameLayout 的特性,ImageView 可以显示 TextView 之上。在这里我默认 ImageView 为不可见,当这个 item 获得焦点之后,再将其设为可见。

我创建了一个 Java 类,这个类继承于View,这个 Java 类的布局设为 check_item.xml (即上面的那个 group 中的item布局)。在这个类中,我可以现实 item 获得焦点、改变 style 等需要的动作。

然后在布局中使用自定义的 View 就可以了,上图 group 中我向布局中添加了三个自定义的 View ,然后在逻辑里用一个布尔数组来标识这三个 Veiw 。若我要实现的是 group 的单选功能,这个布尔数组中只有一个值为 true ,当某个 item 获得焦点后,这个布尔数组对应的这个 item 的值为true,其他都设为false;若 group 需要实现的多选功能,当 item 获得焦点后只需将其对应的布尔数组的值设为 false 即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值