Android(安卓)UI(CheckBox)详解
16lz
2021-01-26
目录:
1.CheckBox应用场景
2.CheckBox一般使用
3.自定义CheckBox
4.CheckBox在ListView中的问题
1.CheckBox应用场景
CheckBox应用于可多选的场景,比如多文件的增删改查,移动,以及爱好啊这些的选择等等
2.CheckBox简单使用
1)主布局文件
3.自定义CheckBox
注:自定义的方式有很多种,在此就实现一种,如果伙伴们感兴趣,可以去我前面的文章中查看其他几种实现方式
1)导入背景图片(原谅我盗图,当然只做自己学习所用,伙伴们可别学我)
2)实现checkbox_selector.xml
3)主布局
4)Java文件(可参考2)
5)效果截图
注:我们经常会有需求是在ListView中去全选、多选、取消选择选项,同时在ListView中我们常用ConvertView去优化效率,但是加入
CheckBox后,当我们选择的item被滑动消失后又出现时,因为item复用的缘故,被选中的状态可能消失,所以接下来我们主要的目的就是解决这个问题
1)单个list item布局list_item.xml
2)主布局文件chb_list_activity.xml
3)适配器类MyAdapter.java
4)主布局类ChbListActivityActivity.java
1.CheckBox应用场景
2.CheckBox一般使用
3.自定义CheckBox
4.CheckBox在ListView中的问题
1.CheckBox应用场景
CheckBox应用于可多选的场景,比如多文件的增删改查,移动,以及爱好啊这些的选择等等
2.CheckBox简单使用
1)主布局文件
<?xml version="1.0" encoding="utf-8"?>
2)Java文件 package com.example.elimy.checkboxui;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import android.view.Menu;import android.view.MenuItem;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.TextView;import java.util.ArrayList;public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener { private CheckBox musicCkb; private CheckBox tripCkb; private CheckBox filmCkb; private CheckBox gameCkb; private TextView result_tv; private Button endBtn; //爱好数组 ArrayList hobbies=new ArrayList(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 musicCkb = (CheckBox) findViewById(R.id.chb_music); tripCkb = (CheckBox) findViewById(R.id.chb_trip); filmCkb = (CheckBox) findViewById(R.id.chb_film); gameCkb = (CheckBox) findViewById(R.id.chb_game); result_tv = (TextView) findViewById(R.id.result_tv); endBtn= (Button) findViewById(R.id.end); //设置监听器 musicCkb.setOnCheckedChangeListener(this); tripCkb.setOnCheckedChangeListener(this); filmCkb.setOnCheckedChangeListener(this); gameCkb.setOnCheckedChangeListener(this); //为button设置监听器 endBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { StringBuilder sb=new StringBuilder(); for (int i =0;i
3)效果截图 3.自定义CheckBox
注:自定义的方式有很多种,在此就实现一种,如果伙伴们感兴趣,可以去我前面的文章中查看其他几种实现方式
1)导入背景图片(原谅我盗图,当然只做自己学习所用,伙伴们可别学我)
2)实现checkbox_selector.xml
<?xml version="1.0" encoding="utf-8"?>
3)主布局
<?xml version="1.0" encoding="utf-8"?>
4)Java文件(可参考2)
5)效果截图
注:我们经常会有需求是在ListView中去全选、多选、取消选择选项,同时在ListView中我们常用ConvertView去优化效率,但是加入
CheckBox后,当我们选择的item被滑动消失后又出现时,因为item复用的缘故,被选中的状态可能消失,所以接下来我们主要的目的就是解决这个问题
1)单个list item布局list_item.xml
<?xml version="1.0" encoding="utf-8"?>
2)主布局文件chb_list_activity.xml
<?xml version="1.0" encoding="utf-8"?>
3)适配器类MyAdapter.java
package com.example.elimy.checkboxui;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.TextView;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;/** * Created by elimy on 2016-08-07. * 功能:实现数据与布局的绑定 */public class MyAdapter extends BaseAdapter { private ArrayList list =null; private Context context=null; private LayoutInflater inflater= null; private static HashMap checkeds=null; /* 实现checkeds属性的get set方法,方便在布局类中设置值 */ public HashMap getCheckeds() { return checkeds; } public void setCheckeds(HashMap checkeds) { MyAdapter.checkeds = checkeds; } /* * Context:上下文 * ArrayList
4)主布局类ChbListActivityActivity.java
package com.example.elimy.checkboxui;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;public class ChbListActivityActivity extends AppCompatActivity { private ListView listView; private Button selectAll,unSelect; private ArrayList data= null ; private CheckBox checkBox; private int checkedNum =0; private TextView item_tv; /** * list需要的资源:1.适配器adapter 2.listview 3.数据 * */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chb_list_activity); //初始化 selectAll = (Button) findViewById(R.id.selectAll); unSelect = (Button) findViewById(R.id.unSelect); checkBox = (CheckBox)findViewById(R.id.checkbox); item_tv = (TextView) findViewById(R.id.item_tv); //初始化listview listView = (ListView) findViewById(R.id.listview); //初始化数据 final ArrayList data = initData(); //初始化适配器 final MyAdapter myAdapter = new MyAdapter(ChbListActivityActivity.this,data); //为listView设置适配器 listView.setAdapter(myAdapter); //selectAll设置监听器 selectAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { for (int i = 0; i < data.size(); i++) { myAdapter.getCheckeds().put(i, true); } //数据改变通知 myAdapter.notifyDataSetChanged(); } }); //unSelect取消监听 unSelect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { for(int i=0; i parent, View view, int position, long id) { // checkboxClick(myAdapter,position); //取得viewHolder实例,避免一层层的去找CheckBox MyAdapter.ViewHolder holder= (MyAdapter.ViewHolder) view.getTag(); //更改CheckBox状态 holder.ckb.toggle(); //记录CheckBox状态 myAdapter.getCheckeds().put(position,holder.ckb.isChecked()); //获取单击项的文本 String s = data.get(position); if(holder.ckb.isChecked()==true){ Toast.makeText(ChbListActivityActivity.this,"你选了"+s,Toast.LENGTH_SHORT).show(); }else { Toast.makeText(ChbListActivityActivity.this,"你取消了选择"+s,Toast.LENGTH_SHORT).show(); } //数据改变通知 myAdapter.notifyDataSetChanged(); } }); } /* *单击事件的另一种处理方法 */ public void checkboxClick(MyAdapter myAdapter, int position){ String s = data.get(position); Log.d("String","s"); if (myAdapter.getCheckeds().get(position)==true) { myAdapter.getCheckeds().put(position, false); Toast.makeText(ChbListActivityActivity.this,"你取消了选择"+s,Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(ChbListActivityActivity.this,"你选择了"+s,Toast.LENGTH_SHORT).show(); myAdapter.getCheckeds().put(position, true); } myAdapter.notifyDataSetChanged(); } /* * 初始化数据 */ private ArrayList initData() { data = new ArrayList(); //初始化TextView text数组 for(int i=0;i<18;i++){ data.add("数据" + i); } return data; }}
5)效果截图
更多相关文章
- Android(安卓)调用摄像头拍照 以及 从相册中选择照片
- 使用ViewPager来实现Tab的效果
- 【Android(安卓)开发教程】LinearLayout线性布局
- Android(安卓)studio中为app添加多语言支持
- android AlertDialog布局 ——2
- Android侧拉框Demo
- libgdx的使用--环境搭建测试
- 菜鸟Android(1)
- android通过反射获取wifi热点ap的ssid和password