Android CheckedTextView 使用+实例

CheckedTextView是什么

        CheckedTextView继承自TextView且实现了Checkable接口,对TextView界面和显示进行了扩展的控件,支持Checkable。可以实现单选多选功能,在你懒得使用两者结合的时候,这就是不二选择。

主要XML属性

        android:checkMark 按钮样式。

  • 默认单选框样式:android:checkMark="?android:attr/listChoiceIndicatorSingle"

  • 默认复选框样式:android:checkMark="?android:attr/listChoiceIndicatorMultiple"

  • 当然也可以使用drawable自定义样式

        android:checkMarkTint 按钮的颜色。

        android:checkMarkTintMode 混合模式按钮的颜色。 

        android:checked 初始选中状态,默认false。

在点击事件里判断状态设置状态

CheckedTextView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {CheckedTextView.toggle();//切换选中与非选中状态}
});

        咱们看看CheckedTextView.toggle()是干嘛的

public void toggle() {setChecked(!mChecked);
}

        就是实现这个控件的状态反操作。

第一次点击无效

        android:focusableInTouchMode="true",这个属性加上会导致第一次点击触发不了选择事件。

实例

        官方文档指出,结合ListView使用更佳,咱下面通过一个栗子了解一下,下面是效果图:

1.主界面CheckedTextViewActivity.java

public class CheckedTextViewActivity extends AppCompatActivity {private ListView lv_ctv_multiple,lv_ctv_single;private CtvMultipleAdapter ctvAdapter;private TextView tv_multiple_title,tv_single_title;private CtvSingleAdapter ctvSingleAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_textview_ctv);//加载布局文件initView();}private void initView() {ArrayList<String> ctvString = new ArrayList<>();ctvString.add("秦始皇嬴政");ctvString.add("汉高祖刘邦");ctvString.add("唐太宗李世民");ctvString.add("宋太祖赵匡胤");//复选lv_ctv_multiple = findViewById(R.id.lv_ctv_multiple);tv_multiple_title = findViewById(R.id.tv_multiple_title);ctvAdapter = new CtvMultipleAdapter(this,ctvString,tv_multiple_title);lv_ctv_multiple.setAdapter(ctvAdapter);//设置Item间距lv_ctv_multiple.setDividerHeight(0);//单选lv_ctv_single = findViewById(R.id.lv_ctv_single);tv_single_title = findViewById(R.id.tv_single_title);ctvSingleAdapter = new CtvSingleAdapter(this,ctvString,tv_single_title);lv_ctv_single.setAdapter(ctvSingleAdapter);//设置Item间距lv_ctv_single.setDividerHeight(0);}
}

2.主布局activity_textview_ctv.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="@dimen/dimen_20"><TextViewandroid:id="@+id/tv_multiple_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/dimen_10"android:textColor="@color/black"android:text="复选"android:textSize="@dimen/text_size_16" /><ListViewandroid:id="@+id/lv_ctv_multiple"android:layout_width="match_parent"android:layout_height="180dp" /><TextViewandroid:id="@+id/tv_single_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/dimen_10"android:text="单选"android:textColor="@color/color_188FFF"android:layout_marginTop="@dimen/dimen_10"android:textSize="@dimen/text_size_20" /><ListViewandroid:id="@+id/lv_ctv_single"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>

3.复选框Adapter

public class CtvMultipleAdapter extends BaseAdapter {private LayoutInflater mInflater;//得到一个LayoutInfalter对象用来导入布局private List<String> list;private TextView tvTitle;private List<String> selectList = new ArrayList<>();public CtvMultipleAdapter(Context context, List<String> list, TextView tv) {this.mInflater = LayoutInflater.from(context);this.list = list;tvTitle = tv;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {final CtvViewHolder holder;final String string = list.get(position);//观察convertView随ListView滚动情况if (convertView == null) {convertView = mInflater.inflate(R.layout.item_ctv_multiple, null);holder = new CtvViewHolder();/*得到各个控件的对象*/holder.ctv_top = (CheckedTextView) convertView.findViewById(R.id.ctv_top);convertView.setTag(holder);//绑定ViewHolder对象} else {holder = (CtvViewHolder) convertView.getTag();//取出ViewHolder对象}holder.ctv_top.setText(string);//默认选中状态if(holder.ctv_top.isChecked()){//list未包含选中string;if(!selectList.contains(string)){selectList.add(string);}}if (selectList.size() == 0) {tvTitle.setText("");} else {tvTitle.setText(selectList.toString());}holder.ctv_top.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {holder.ctv_top.toggle();//切换选中与非选中状态//单选if(holder.ctv_top.isChecked()){////list未包含选中string;if(!selectList.contains(string)){selectList.add(string);}}else{//list未包含选中string;if(selectList.contains(string)){selectList.remove(string);}}if (selectList.size() == 0) {tvTitle.setText("");} else {tvTitle.setText(selectList.toString());}}});return convertView;}/*存放控件*/public class CtvViewHolder {public CheckedTextView ctv_top;}@Overridepublic boolean areAllItemsEnabled() {return false;//Item不可点击}@Overridepublic boolean isEnabled(int position) {return false;//Item不可点击// 拦截事件交给上一级处理//return super.isEnabled(position);}}

4.复选框adapter对应布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="match_parent"><CheckedTextViewandroid:id="@+id/ctv_top"android:checked="true"android:checkMark="?android:attr/listChoiceIndicatorMultiple"android:checkMarkTint="@color/color_FF773D"android:padding="10dp"android:textSize="16sp"android:layout_marginTop="3dp"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>

        这里用到checkMark(默认复选框样式)、checkMarkTint(复选框颜色设为黄色)、和checked(true默认选中)几个属性,可以更好的理解他们。

5.单选框adapter

  private String selectStr="";//全局变量holder.ctv_top.setText(string);holder.ctv_top.setChecked(selectStr.equals(string));holder.ctv_top.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {holder.ctv_top.toggle();//切换选中与非选中状态//单选if(holder.ctv_top.isChecked()){selectStr=string;}else{selectStr="";}tvTitle.setText(selectStr);notifyDataSetChanged();}});

        大部分与复选框CtvMultipleAdapter设置相同,仅部分不同就不做多重复了。

6.单选框adapter对应布局

 <CheckedTextViewandroid:id="@+id/ctv_top"android:checkMark="?android:attr/listChoiceIndicatorSingle"android:padding="10dp"android:textSize="16sp"android:layout_marginTop="3dp"android:layout_width="match_parent"android:layout_height="wrap_content" />

        仅使用单选默认样式。

7.逻辑处理从adapter放在主界面处理

  ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {//在这里进行单选复选的逻辑处理}});

        使用CheckedTextView配合ListView实现单选与多选的功能我们实现了。到这里,关于CheckedTextView我们也就介绍完了,嘿嘿。

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

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

相关文章

Android CheckedTextView 使用+实例,kotlin静态编译

第一次点击无效 android:focusableInTouchMode=“true”,这个属性加上会导致第一次点击触发不了选择事件。 实例 – 官方文档指出,结合ListView使用更佳,咱下面通过一个栗子了解一下,下面是效果图: 1.主界面CheckedTextViewActivity.java public class CheckedTextVi…

Android CheckedTextView 使用+实例,android快速开发平台

第一次点击无效 android:focusableInTouchMode=“true”,这个属性加上会导致第一次点击触发不了选择事件。 实例 – 官方文档指出,结合ListView使用更佳,咱下面通过一个栗子了解一下,下面是效果图: 1.主界面CheckedTextViewActivity.java public class CheckedTextVi…

Vue3使用canvas根据递归类型数据绘制继承树

一、声明变量 //返回值&#xff1a;1&#xff0c;绘图x的最小值和最大值&#xff0c;绘图y的最小值和最大值//计算改变canvas 画布的宽高&#xff0c;重新改变起始X坐标&#xff0c;起始Y坐标let flowData [{"name": "女娲","projectTreeVOList&quo…

如何正确使用ChatGPT?英国大学对AI使用要求汇总

不同于ChatGPT刚变火爆起来的时候的警惕与排斥&#xff0c;许多大学似乎已经选择了与这些新兴的AI技术“和平共处”。 他们不仅对这些技术进行了相关研究&#xff0c;还将ChatGPT融入课程&#xff0c;甚至允许学生们在作业中使用它们。 但“和平共处”也并不意味学生可以抛弃…

考研英语阅读技巧总结(唐迟)

正文 做题顺序&#xff1a;看一段做一题 总结更多的是为了找共性&#xff1a; 1.文章疑问句后的回答是文章的中心。 1&#xff09;因为疑问句为了引起读者注意&#xff0c;而需要读者注意的往往是文章想要强调的观点。【2015 T2 第一句】 2&#xff09;疑问句同样可以表示…

四川大学图书情报档案专业考研初试介绍和经验(2023.1.02已更新)

文章目录 川大图情基本情况2023年招生情况近5年录取数据复试2021-2022年复试线学硕复试线图情专硕复试线 2021-2022年复试录取分数2022年学硕部分拟录取人员详细分数(不含调剂) 专业课备考专业课资料辅导资料&#xff08;可选&#xff09;667科目备考参考策略972科目备考方法参…

ChatGPT评未来考研最好就业的十大专业。你的上榜了吗?

各位考研人大家好&#xff0c;作为考研人&#xff0c;考研的目的无非就是想继续深造&#xff0c;然后有好的就业&#xff0c;而对于好的就业专业&#xff0c;ChatGPT评出未来考研最好就业的十大专业&#xff0c;给大家参考&#xff0c;看有你本专业吗&#xff1f; 01 人工智能与…

AI大语言模型创业路上的赢家与输家

这是一篇来自于Sam Hogan的博文译文&#xff1a; 随着像Jasper这样的公司开始放缓脚步&#xff0c;为经历数年低迷的风险投资创业生态带来一波复兴的预期似乎难以实现。目前明确的赢家不多&#xff0c;失败者也就那么几家&#xff0c;还有一小部分前景看好的公司充满不确定性。…

领略未来无需远方,华为全屋智能将在AWE描绘智慧生活新图景

作者 | 曾响铃 文 | 响铃说 4月27日-30日&#xff0c;AWE 2023中国家电及消费电子博览会将在上海新国际博览中心举行&#xff0c;这是AWE展沉淀两年后的再次回归。 作为家电及消费电子领域TOP3的国际盛会&#xff0c;本届AWE以“智科技&#xff0c;创未来”为主题&#xff0…

艾瑞报告:预计2023年家用智能照明市场规模过百亿,Yeelight易来引领行业发展

照明是家居的主要部分&#xff0c;以智能化控制技术光环境设计为核心的智能照明成为智能家居重要的子系统与子应用&#xff0c;智能照明通过精准的设计&#xff0c;将单品链接成系统&#xff0c;通过算法和云平台实现智能化&#xff0c;针对不同的空间适配不同的灯光&#xff0…

【周末闲谈】文心一言,模仿还是超越?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 周末闲谈 ✨第一周 二进制VS三进制 文章目录 周末闲谈前言一、背景环境二、文心一言&#xff1f;(_)?三、文心一言的优势&#xff1f;&#x1f617;&#x1f617;&#x1f617;四、文心…

文心一言和讯飞星火全面对比测试:(五)编程能力

相关文章&#xff1a; 实战 | 用ChatGPT处理word表格数据&#xff1a;直接采用ChatGPt和利用ChatGPT编写python脚本两种方法 「文心一言」 vs ChatGPT&#xff0c;结果没有你想向中的那么不堪 文心一言和讯飞星火全面对比测试&#xff1a;&#xff08;一&#xff09;语言理解…

文心一言 vs GPT-4实测!百度背水一战交卷

GPT-4发布一天之后&#xff0c;压力全部给到百度这边。 就在刚刚&#xff0c;百度交卷。 文心一言&#xff0c;百度全新一代知识增强大语言模型&#xff0c;正式在百度总部“挥手点江山”会议室里发布。 在一片静寂的氛围里&#xff0c;李彦宏小步登场&#xff0c;语气里带着点…

快捷工具箱小程序-做你的小树洞

今天闲来无事&#xff0c;发现了一个有趣的小程序-做你的小树洞&#xff0c;包含ChatGpt小机器人 小程序总体界面是这样的 这个小程序里边有很多有趣的小功能&#xff0c;最让我喜欢的就是藏头诗的创作。仅仅需要输入关键词语&#xff0c;然后就能够进行创作诗句&#xff0c;他…

藏头诗生成器

一个藏头诗生成器的小程序&#xff0c;自定义文字即可生成一首诗词。 该小程序通过机器学习&#xff0c;预训练8万多首诗词&#xff0c;5千多个韵词&#xff0c;能通过关键词生成押韵的藏头诗&#xff0c;也可以生成藏字诗&#xff1b; 在生成结果页面&#xff0c;可选择复制…

ChatGPT + MindShow 三分钟搞定PPT制作

制作一份“通用性”的PPT需要几步&#xff1f; 三步 接下来&#xff0c;我们借助ChatGPT和MindShow&#xff0c;大概三分钟完成操作&#xff0c;就能制作出来完胜大部分人的PPT文件。具体可看文末效果导示。 解锁更多AIGC&#xff08;ChatGPT、AI绘画&#xff09;玩法&#…

狼人杀凉了,贴着AI标签的剧本杀如何构建自己的商业版图

文 | 魏启扬 来源 | 智能相对论&#xff08;ID&#xff1a;aixdlun&#xff09; “天黑请闭眼”。 这是“狼人杀”的开场台词&#xff0c;也可用来形容“狼人杀”的现状——前景黑暗&#xff0c;惨不忍睹。 2017年&#xff0c;“狼人杀”的热度达到顶点&#xff0c;无论是线下…

百变大侦探剧本杀开启新玩法!等你一本正经胡说八“倒”

“1234” “4321” 小时候的你有玩过这样的游戏吗&#xff1f; 当你一本正经的胡说八“倒”时候&#xff0c;童年的趣味就在游戏间。当然&#xff0c;正所谓“一千个读者就有一千个哈姆莱特”&#xff0c;游戏也是一样&#xff01;一千个用户就有一千种玩法&#xff0c;但游…

【洞见研报】剧本杀行业研究报告——告别野蛮生长,剧本杀如何“杀”出一条合规路?

剧本杀起源于西方宴会实况角色扮演推理游戏谋杀之谜&#xff08;Mistery of Murder)&#xff0c;是一种围绕剧情演绎进行的真人角色扮演推理游戏。游戏全程由 DM&#xff08;游戏主持人&#xff09;负责引导&#xff0c;通常有1-10位玩家参与&#xff0c;游戏时长1-5小时不等。…

景区剧本杀小程序解决方案

景区剧本杀小程序可以通过以下解决方案实现&#xff1a; 确定需求&#xff1a;定义剧本杀小程序需要实现的功能和特性&#xff0c;例如角色选择、游戏规则、游戏流程等。 设计UI和UX&#xff1a;设计剧本杀小程序的界面和用户交互流程&#xff0c;使其易于使用和操作。…