搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Gausst松鼠会
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
腾讯面试经验分享,如何面对犀利的面试官?
2
【Android Studio】为Android Studio设置HTTP代理_studio被配置为使用http代理。gradle可能需要这些http代理设置来访问互联网(例如
3
互联网晚报 | 五月天经纪公司否认演唱会假唱;蔚来已获独立造车资质;C罗因推广虚拟币被起诉...
4
【UWB】数学建模 E 题目个人解题答案 - 2021年第十八届华为杯_2021数学建模e题标准答案
5
函数定义时前加static 作用 (C语言)_函数前加static
6
开发属于自己的sdk(以java为例)_java sdk开发
7
calendar 对象跨年获取前一天日期不对_calendar跨年add不正确
8
[Rust 入门] Rust 简介与开发环境搭建_rust 开发
9
07 JS CORE 数组_core js 数组方法
10
Android JetPack组件之ViewModel的使用详解_android viewmodel使用
当前位置:
article
> 正文
android:RadioButton自定义和非自定义的实现_radiobutton extends linearlayout
作者:Gausst松鼠会 | 2024-05-29 21:05:15
赞
踩
radiobutton extends linearlayout
RadioButton在我们开发APP应用中是很常见的,
虽说Android 系统给我们提供了RadioButton但是为了我们的应用有种"与众不同"的效果,因为android的太死板太斯通见惯了.往往都会定制自己的图标.下面我给大家介绍一下我实现的方法:
方法:运用组合控件(ImageView and TextView)
组合控件代码: /***
* 组合控件
*
* @author zhangjia
*
*/
public class RadioButton extends LinearLayout {
private Context context;
private ImageView imageView;
private TextView textView;
private int index = 0;
private int id = 0;// 判断是否选中
private RadioButton tempRadioButton;// 模版用于保存上次点击的对象
private int state[] = { R.drawable.radio_unchecked,
R.drawable.radio_checked };
/***
* 改变图片
*/
public void ChageImage() {
index++;
id = index % 2;// 获取图片id
imageView.setImageResource(state[id]);
}
/***
* 设置文本
*
* @param text
*/
public void setText(String text) {
textView.setText(text);
}
public String getText() {
return id == 0 ? "" : textView.getText().toString();
}
public RadioButton(Context context) {
this(context, null);
}
//引用创建的自定义布局
public RadioButton(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
LayoutInflater.from(context).inflate(R.layout.item, this, true);
imageView = (ImageView) findViewById(R.id.iv_item);
textView = (TextView) findViewById(R.id.tv_item);
}
}
下面是Java代码:
public class MainActivity extends Activity {
ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.lv_main);
listView.setAdapter(new MyAdapter(this));
}
/***
* @author jia
*/
RadioButton temp;
class MyAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
public MyAdapter(Context context) {
super();
this.context = context;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return 10;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final RadioButton radioButton;
if (convertView == null) {
radioButton = new RadioButton(context);
} else {
radioButton = (RadioButton) convertView;
}
radioButton.setText(position + "");
radioButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 模版不为空,则chage.
if (temp != null) {
temp.ChageImage();
}
temp = radioButton;
radioButton.ChageImage();
//temp起到中转布局的作用,在点击非本类的布局时撤销掉上一步点击设置的图片
Toast.makeText(context, radioButton.getText(), 1000).show();
}
});
return radioButton;
}
}
}我来说明一下:我们首先创建一个temp模版,用于记忆你点击的那个RadioButton对象. 在你点击时候,首先查看temp是否为null,如果不为空则执行 temp.ChageImage(); 这个方法是取消选中效果.如果不为null,则首先对该RadioButton执行,取消该按钮选中状态.在执行你点击的那个RadioButton的ChageImage方法,最后记得要把当前的RadioButton付给temp.
效果:
效果是实现了,不过有个小问题,因为目前只有10条数据是看不出效果的.换成20条你就会发现很诡异的问题。
图“:
第15条数据会自动勾选上,找了又找,最后终于发现了,是因为listview 的问题。看下面:
final RadioButton radioButton;
if (convertView == null) {
radioButton = new RadioButton(context);
} else {
radioButton = (RadioButton) convertView;
}
也许你会发现了,因为我们为了提高效率,重用了listview个convertView.所以会出现这种bug,解决方法也很简单,只需要我们把上面代码更换为
去掉
【if (convertView == null)】
radioButton = new RadioButton(context);
//不对布局进行优化就不会出现这个问题
额外拓展:
View view=LayoutInflater.from(context).inflate(R.layout.item, this);
View view1=LayoutInflater.from(context).inflate(R.layout.item, null);
上面两个方法想必大家在熟悉不过了,自定义View的时候离不开LayoutInflater这个东东,那么有什么区别呢,之前我一直不明白,包括写这篇文章的时候,也是看了别人这么搞,自己就比葫芦画瓢了.
public View inflate(int Resourece,ViewGroup root)
作用:填充一个新的视图层次结构从指定的XML资源文件中
reSource:View的layout的ID
root: 生成的层次结构的根视图
return 填充的层次结构的根视图。如果参数root提供了,那么root就是根视图;否则填充的XML文件的根就是根视图。
我简单解释下:当root为null的时候,我们只是把一个xml文件实例化成View对象,反回的就是xml对应的View.而当root不为null的时候,也就是存在parent.那么我们将把这个xml实例化程View对象后,将这个View视图add进其parent中.所以在这里我们用的是LayoutInflater.from(context).inflate(R.layout.item, this);这样其实就是把XML实例化后当作自己的一部分,这样我们在调用此控件的时候,显示的就是我们想要的那个视图了(XML视图).说到这里大家明白了.这样以后用的时候再也不会糊涂了.如果想详细了解那么请参考这篇文章:View视图框架
源码
分析之一:android是如何创建一个view.讲解的那是的相当的透彻,看懂后对于以后我们开发是百利而无一害啊.(*^__^*) .
/*****************************************************************************/
第二种方法:对RadioButton给定样式进行改造
看配置文件
seletor.xml and style.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/radio_checked" android:state_checked="true" android:state_enabled="true"></item>
<item android:drawable="@drawable/radio_unchecked" android:state_checked="false" android:state_enabled="true"></item>
< /selector><resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="RadioButtonStyles">
<item name="android:button">@drawable/selector</item>
</style>
< /resources>最后只需要在RadioButton中引用即可.
<RadioGroup
android:id="@+id/rg_main"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/button1"
style="@style/RadioButtonStyles"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="5K" />
<RadioButton
android:id="@+id/button2"
style="@style/RadioButtonStyles"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="10K" />
</RadioGroup>
这种方式很简单吧,不过我觉的应用范围没有上面自定义来的广,比如说上面我做的项目中,RadioButton中的text有两项,这样我们用RadioButton就无法实现了,遇到比较复杂的RadioButton选择自定义是比较好的.
针对RadioButton 就说这么多了,希望对你有帮助.
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/643933
推荐阅读
article
Android
逆向
之
脱壳
实战篇_
dexdump
.js...
这篇文章比较干,比较偏实战,看之前建议先喝足水,慎入。在学
脱壳
之前,我们先来复习一下,什么时候是加固?加固本质上就是对 ...
赞
踩
article
【
Android
逆向】
Android
系统
文件
分析 (
Android
系统
root
环境准备 ...
一、
Android
系统
root
环境准备、二、查看
Android
根目录信息_
android
studio
roo...
赞
踩
article
【
Android
逆向
】
Android
进程
注入
工具开发 (
SO
进程
注入
环境及
root
权限
获...
一、
SO
进程
注入
环境及
root
权限
获取、二、
进程
注入
时序分析_
so
文件
逆向
开发任务
so
文件
逆向
开发任务 ...
赞
踩
article
android
文件
拷贝
函数
,
Android
免 Root 权限通过
Hook
系统
函数
修改
程序运行
...
Android
免 Root 权限通过
Hook
系统
函数
修改
程序运行
时
内存
指令逻辑一知识回顾在之前一篇文章中, 已经介...
赞
踩
article
android
root
hook
微信
,
[原创]如何使用Fast
Hook
免
root
Hook
微信...
privatevoidbindApplicationNoCheck(StringpackageName
,
Stringpr...
赞
踩
article
关于
代码
家(
干货
集中营
)共享知识点汇总系列
—
—
Android
...
Android
[2017年01月06日发布] 贝塞尔Loading
—
—
化学风暴[2017年01月06日发布] 仿小红书图...
赞
踩
article
Android
APP热更新中的
插件
化(
Hook
技术
:反射或动态代理),
Demo
(2)_andro...
修改AAPT,资源分区,用于
Android
插件
化- https://github.com/BaoBaoJianqiang...
赞
踩
article
Android
Hook
机制之简单实战
_
安卓
hook
...
可以看出,笔者的工作学习模式便是由以下。
_
安卓
hook
安卓
hook
...
赞
踩
article
android
andfix
分析
,
Android
热
修复
框架
AndFix
核心代码
分析
并改进...
前言
AndFix
,全称是
Android
hot-fix,是阿里开源的一个
Android
热
修复
框架,允许APP在不重新发布...
赞
踩
article
Android
面试之必问高级
知识点
_
android
-
1295148c
....
...
1,编译模式1.1 概念在
Android
早期的版本中,应用程序的运行环境是需要依赖Dalvik虚拟机的。不过,在后来的版...
赞
踩
article
给
Android
开发者
的第一堂课_沉浸
式
源代码
android
日历
万年历
...
安卓(
Android
)是一种基于 Linux 内核(不包含 GNU 组件)的自由及开放
源代码
的操作系统。主要使用于移动设...
赞
踩
article
安卓
移动
开发
项目
化教程
,
Android
-App
的
设计
架构
经验谈...
对程序员来说
,
很多技术
的
学习都是“防御性”
的
。也就是说
,
我们是在为未来学习。我们学习新技术
的
目
的
,
或是为了在新
项目
中应用...
赞
踩
article
android
app
没落
,时代进步or缩水?盘点那些即将
消失
的
APP
...
手机的软硬件一直在急速进化,而某些硬件的变更,往往又会令一些软件随之改动。手机上的这些变化对于用户来说,是否一定是好事?...
赞
踩
article
Android
主流通用常用
框架
汇总(
持续
更新
)
_
android
框架
...
本文讲解了我对
Android
开发现状的一些看法,也许有些人会觉得我的观点不对,但我认为没有绝对的对与错,一切交给时间去证...
赞
踩
article
Android
Studio NDK编译报错
requires
unsupported
dynamic...
报错信息:[78/82] Building CXX object lidarapp/LASlib_output_dir/...
赞
踩
article
Android
MQTT
_
android
adapter使用
mqtt
...
服务器的搭建搭建部分参考的https://blog.csdn.net/pjlxm/article/details/785...
赞
踩
article
Android
不通过
oss
-
android
-sdk,直接访问
阿
里
云
OSS
_如何在
android
里
连接...
自开发一个
Android
APP,只有自己一个人进行使用,想直接从
OSS
上下载文件做解析,但是
阿
里
云提供给
Android
...
赞
踩
article
Android Studio虚拟机配置出现
Intel
®
HAXM
installation
fail...
Intel
®
HAXM
installation
failed
. To install
Intel
®
HAXM
foll...
赞
踩
article
Android
Studio
中
HAXM
安装失败的问题(
Intel
HAXM
install
atio...
日志就是报错信息上面的那一句,我这里日志说的是:To un
install
the
current
version
: 7....
赞
踩
article
Android
中
资源
文件夹
RES/RAW和
ASSETS
的
使用
区别...
/ 读取res/raw/example.txt文件内容try {= null) {*res/raw:适用于简单的
资源
文件...
赞
踩
相关标签
android
java
开发语言
移动开发
安卓逆向
逆向安全
系统文件
逆向
so注入
android 文件拷贝函数
android root hook微信
android andfix 分析
apache
架构
android app 没落
cmake
ndk
MQTT
物联网
Android