自定义下拉选择框

        大家好,今天给大家分享的是自定义下拉选择框,因为系统的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类的使用,这是我新接触到知识,所有要好好加深印象。晚安做个好梦。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值