大家好,今天给大家分享的是自定义下拉选择框,因为系统的Spinner下拉框的样式丑的要死,用户体验差,所以就有了自定义下拉选择框,美观大方好看,更容易让用户接受,基本上每款app都会有自己的自定义下拉选择框,这是一项非常重要的技术,需要好好学习。下面由我尽情为大家讲解。。。。。
lanyout布局我就不写了,因为很简单,也是我们很常用到的知识点,我就不把时间放在这里,还是把中心放在实现代码上。相信友友私底下能很好的完成布局界面。
mainActivity.java
public class MainActivity extends Activity implements OnClickListener {
private EditText mBodyEt;
private ImageView mImgIv;
private ArrayList<String> list;// 存入数据
private MyAdapter adapter;
private ListView LstView;
private Context context;
private PopupWindow popupWindow;
ViewGroup group;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();// 初始化组件
initListenter();// 初始化监听
// 创建集合对象,添加数据
list = new ArrayList<String>();
for (int i = 0; i < 15; i++) {
list.add(900 + i + "");
}
Log.i("AAA", "list::" + list);
//初始化适配器
adapter = new MyAdapter();
LstView = new ListView(this);
//设置ListView背景颜色
LstView.setBackgroundColor(Color.WHITE);
//设置垂直游标不显示
LstView.setVerticalScrollBarEnabled(false);
//展示数据
LstView.setAdapter(adapter);
LstView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//点击列表,编辑框显示内容,position列表项的索引号
mBodyEt.setText(list.get(position));
// 列表消失
popupWindow.dismiss();
}
});
}
// 初始化监听
private void initListenter() {
mImgIv.setOnClickListener(this);
}
// 初始化组件
private void initView() {
mBodyEt = (EditText) findViewById(R.id.body_et);
mImgIv = (ImageView) findViewById(R.id.img_iv);
context = this;
}
// 点击事件
public void onClick(View v) {
//判断弹出框不能为空,参数一:弹出框的内容,这里是listView显示,参数二:弹出框的长,这里是编辑宽的长度,参数三:写死的宽度
if (popupWindow == null) {
popupWindow = new PopupWindow(LstView, mBodyEt.getWidth(), 350);
}
//下拉框显示的位置,参数一:放在编辑框下面
popupWindow.showAsDropDown(mBodyEt, 0, 0);
}
//自定义适配器
public class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return list == null ? 0 : list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView,
ViewGroup parent) {
final View view = LayoutInflater.from(context).inflate(
R.layout.item_main, parent, false);
TextView text = (TextView) view.findViewById(R.id.item_text);
ImageView imageView = (ImageView) view
.findViewById(R.id.item_delete);
text.setText(list.get(position));
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//删除列表
list.remove(position);
//数据更新
notifyDataSetChanged();
Log.i("AAA", "list.size():" + list.size());
//获取list总数据的宽度,视图宽度*数据的大小=总数据的list宽度
int height = view.getHeight();
int listHeight = height * list.size();
//弹出框更新,参数一:弹出框的长度,这里是编辑框的长度,参数二:判断,当总数据的list宽度小于350时,显示的是现在数据的宽度,反之,显示350dp
popupWindow.update(mBodyEt.getWidth(),
listHeight < 350 ? listHeight : 350);
//判断,删除到最后一条数据。弹出框消失
if (list.size() == 0) {
popupWindow.dismiss();
//点击小图片消失
mImgIv.setVisibility(View.INVISIBLE);
}
}
});
return view;
}
}
}
今晚的自定义下拉选择框就到了,涉及到知识点不到,就是灵活应用以前的知识,新的知识点事popupWindoen类的使用,这是我新接触到知识,所有要好好加深印象。晚安做个好梦。

5182

被折叠的 条评论
为什么被折叠?



