Android 下拉选择框自定义view
首先来看一下实现的效果
基本思路:继承PopupWindow的自定义View
说明:下图这部分自己布局,本文中主要说明的是点击某个分类显示的下拉实现
第一步:自定义 SpinnerPopuwindow继承PopupWindow
/*** Created by sws on 2019-04-28.* from:* describe:*/public class SpinnerPopuwindow extends PopupWindow {private View conentView;private ListView listView;private SpinnerPopAdapter adapter;private Activity context;private TextView pop_title;private TextView pop_cancel;/*** @param context 上下文* @param string 获取到未打开列表时显示的值* @param list 需要显示的列表的集合* @param itemsOnClick listview在activity中的点击监听事件*/@SuppressLint("InflateParams")public SpinnerPopuwindow(final Activity context, final String string, final List<String> list, AdapterView.OnItemClickListener itemsOnClick) {LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);this.context =context;conentView = inflater.inflate(R.layout.popuwindow_spinner, null);// 设置SelectPicPopupWindow的Viewthis.setContentView(conentView);// 设置SelectPicPopupWindow弹出窗体的宽this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);// this.setWidth(view.getWidth());// 设置SelectPicPopupWindow弹出窗体的高this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);// 设置SelectPicPopupWindow弹出窗体可点击this.setFocusable(true);// 刷新状态this.update();this.setOutsideTouchable(false);// 实例化一个ColorDrawable颜色为半透明ColorDrawable dw = new ColorDrawable(0000000000);// 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作this.setBackgroundDrawable(dw);this.setOnDismissListener(new OnDismissListener() {@Overridepublic void onDismiss() {darkenBackground(1f);}});//解决软键盘挡住弹窗问题this.setSoftInputMode(PopupWindow.INPUT_METHOD_NEEDED);this.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);// 设置SelectPicPopupWindow弹出窗体动画效果// this.setAnimationStyle(R.style.AnimationPreview);adapter = new SpinnerPopAdapter(context,list);listView = (ListView) conentView.findViewById(R.id.listView);listView.setOnItemClickListener(itemsOnClick);listView.setAdapter(adapter);// setAdapter是异步进行的,为了使弹窗能即时刷新,所以使用post+RunnablelistView.post(new Runnable() {@Overridepublic void run() {//主要是为了比对未打开列表时显示的值和列表中的值进行默认选中for(int j = 0;j<list.size();j++){if(string.equals(list.get(j).toString())){listView.setItemChecked(j, true);//listview自带的方法}else {listView.setItemChecked(j, false);}}}});pop_title = (TextView) conentView.findViewById(R.id.pop_title);
// pop_cancel = (TextView) conentView.findViewById(R.id.pop_cancel);
//
// pop_cancel.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// dismiss();
// darkenBackground(1f);
// }
// });}//给下拉列表的设置标题,增加复用性public void setTitleText(String str){pop_title.setText(str);}//获取选中列表中的数据所对应的positionpublic int getText(){return listView.getCheckedItemPosition();}/*** 显示popupWindow** @param parent*/public void showPopupWindow(View parent) {if (!this.isShowing()) {// 以下拉方式显示popupwindowthis.showAsDropDown(parent);
// this.showAsDropDown(parent,0,10);
// this.showAtLocation(parent, Gravity.BOTTOM|Gravity.CENTER, 0, 0);darkenBackground(0.9f);//弹出时让页面背景回复给原来的颜色降低透明度,让背景看起来变成灰色}}/*** 关闭popupWindow*/public void dismissPopupWindow() {this.dismiss();darkenBackground(1f);//关闭时让页面背景回复为原来的颜色}/*** 改变背景颜色,主要是在PopupWindow弹出时背景变化,通过透明度设置*/private void darkenBackground(Float bgcolor){WindowManager.LayoutParams lp = context.getWindow().getAttributes();lp.alpha = bgcolor;context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);context.getWindow().setAttributes(lp);}
}
本类中主要是创建一个PopupWindow,并编写他的显示、关闭,点击监听,设置标题等方法,你可以按照你的需求更改背景颜色、弹出窗体的宽高等。
需要用到的列表布局如下 :一个简单的listview和标题TextView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white"><TextViewandroid:id="@+id/pop_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="6dp"android:gravity="center"android:textSize="@dimen/text14"/><Viewandroid:layout_width="match_parent"android:layout_height="0.5dp"android:background="@color/hui"/><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="wrap_content"android:divider="#00000000"android:choiceMode="singleChoice"></ListView>
</LinearLayout>
第二步:在要使用下拉列表的Activity中创建
/** 项目类型数据*/
private List<String> lxData;private SpinnerPopuwindow lxSpinnerPopuwindow;//在页面上项目类型按钮的点击监听中加一下代码type_lx = tvlx.getText().toString();lxSpinnerPopuwindow = new SpinnerPopuwindow( StreetDeviceListActivity.this,type_lx,lxData,lxitemsOnClick);
//type_lx:选择某一项后显示选中内容的TextViewlxSpinnerPopuwindow.showPopupWindow(llSX);//llSX是指此下拉列表要显示在那个view下边lxSpinnerPopuwindow.setTitleText("项目类型");//给下拉列表设置标题
第三步:为下拉列表设置监听
private AdapterView.OnItemClickListener lxitemsOnClick = new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {String value = lxData.get(lxSpinnerPopuwindow.getText());tvlx.setText(value);lxSpinnerPopuwindow.dismissPopupWindow();//TODO 这儿写点击某一项之后你要执行的代码}};
Android 下拉选择框自定义view相关推荐
- android——下拉选择框(自定义spinner)
相信大家都有遇到下拉选择这个功能,接下来我把我学习的给大家分享一下. 一.导入依赖 implementation 'com.github.arcadefire:nice-spinner:1.4.4' ...
- 自定义组合控件:下拉选择框
Spinner 自定义组合控件之下拉选择框 项目概述 下拉选择框主要是通过在EditText 下用PopupWindow 动态显示ListView 控件来实现的.下拉选择框可以方便用户的输入效率,以此 ...
- html下拉选择框箭头改为年,CSS自定义select下拉选择框的样式(不用其他标签模拟)...
今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...
- 微信小程序自定义下拉选择框与分页加载--自用【随笔】
效果图展示 下拉加载 上拉加载 编码实现 wxml <!--pages/unitmanage/unitlease/unitlease.wxml--> <view><vie ...
- 自定义html下拉选择框,CSS自定义select下拉选择框的样式(不用其他标签模拟)
今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...
- 类似QQ登陆界面保存密码和账号下拉选择框
本界面的效果 需要的知识 PopupWindon ListView的内部响应事件 分析 步骤 ListView PopupWindow 点击事件 用户信息存储 GSON 的用法 实施方案 情况一 情况 ...
- Android下拉选择弹窗
起因呢又是有个需求,也是自己觉得好看,很多app都有下拉选择框,就想着实现下(主要是时间空闲,如果时间少,项目急,就找现成的),先看图片: 直接上代码: xml: <com.yinp.proap ...
- UI标签库专题十一:JEECG智能开发平台 DictSelect (数据字典下拉选择框)
1. DictSelect (数据字典下拉选择框) 1.1. 参数 属性名 类型 描述 是否必须 默认值 typeGroupCode string 字典分组编码 是 null field str ...
- QComboBox下拉选择框
QComboBox简介 QComboBox 是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个 QLineEdit 用作输入. QComboBox 除了显示可见下拉列表外,每个项(i ...
最新文章
- 解读|智能技术“核聚变”催生智能经济,将拉动十万亿市场
- ExtJS(3)- 自定义组件(星级评分)
- 这家芯片公司98%员工学历不足本科,却要布局全产业链冲刺IPO,网友:认真的吗?...
- 使用调用者权限实现Schema导向操作
- 学好python薪水有多少笔画_Python学到什么程度可以面试工作?
- 2017.9.27 可持久化并查集 失败总结
- SpringCloud工作笔记102---苞米豆mybitis增强工具
- Go编程语言能干什么
- 多任务学习Multi-task Learning(MTL)概述
- virtualbox 搭建opnsense 防火墙
- 【图像超分辨率】Deep Learning for Image Super-resolution: A Survey
- 机器学习中常见知识点总结
- 盘点无线互联网战国七雄
- 异常:org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hiber
- XUL 用户界面语言介绍
- 养牛和养羊相比,用同样的资金,哪个效益会更高一些?
- [每天读一点英文:那些给我勇气的句子]George Soros—the financial crocodile
- 步进电机及驱动芯片选型指南
- ESP8266 NodeMCU开发板
- 利用adb指令为IPTV盒子安装应用
热门文章
- Selenium 爬取评论数据,就是这么简单!
- 致批驳哥德尔不完全性定理者
- 哥德尔递归汉译和原始递归——哥德尔原著英译拆解汉译之七
- 微信公众号开发整理(四)--音乐消息回复
- token - 令牌
- 通过文献计量学助您发表高影响因子论文—基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法
- algoc++之求解根号2
- office修复找不到msi_office2013安装出错,老是出现找不到officeMUI.msi或则officeMUI.xml等,是什么原 - Microsoft Community...
- 半阳不阳后的一些总结
- html 控制横向打印机,hp LaserJet 1000打印机怎么设置实现横向打印?