【Android】自定义一个选择手机号下拉框

1、需求:点击下拉按钮显示一个手机号码的选择列表;

【Android】自定义一个选择手机号下拉框_第1张图片

2、思路:使用PopupWindow和ListView来实现这个功能

PopupWindow可以显示在固定布局的某个位置的功能,正好满足这个需求。

3、代码

github地址

在自定义PopupWindow类添加一个列表:

布局代码:




    

自定义PopupWindow类:


public class PhoneListPopUpWindow extends PopupWindow {

    private static final String TAG = "PhoneListPopUpWindow";

    private View contentView;
    private ListView phoneListView;
    private ArrayList list = new ArrayList<>();
    private PhoneNumberListAdapter phoneNumberListAdapter;
    private Context context;
    private AdapterView.OnItemClickListener onItemClickListener = null;

    public PhoneListPopUpWindow(Context context) {
        this.context = context;
        contentView = LayoutInflater.from(context).inflate(R.layout.ahdi_layout_phone_popup, null, false);

        setContentView(contentView);
        setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        setOutsideTouchable(false);
        setTouchable(true);
        initView();
    }

    private void initView(){
        phoneListView = contentView.findViewById(R.id.phone_list);
        phoneNumberListAdapter = new PhoneNumberListAdapter(context, list);
        phoneListView.setAdapter(phoneNumberListAdapter);
        phoneListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                if (onItemClickListener != null){
                    onItemClickListener.onItemClick(parent, view, position, id);
                }
            }
        });
    }

    /**
     * 监听列表的item点击
     * @param onItemClickListener
     */
    public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    /**
     * 更新数据
     * @param data
     */
    public void setData(List data){
        list.clear();
        for (int i = 0; i 

showAtLocation(View parent) 传入一个要定锚点的view确定popupWindow要显示的位置。

setData(List data)传入要显示的手机号码列表

setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener)传入一个监听器,监听点击的列表item.

getPopupWindowHeight(View parent, int[] location)根据锚点view的位置距离手机屏幕底部的距离和实际需求要显示的条目的高度判断popupWindow要显示的高度。

OK,要的功能就这些,更多详情看github上的代码

 

你可能感兴趣的:(自定义view)