下拉列表ListPopupWindow

1、查看源码,会发现PopupMenu和Spinner内部都是使用ListPopupWindow实现下拉列表效果,所以ListPopupWindow是基础。
2、PopMenu的列表页面无法定制UI,只能显示光秃秃的文字;而ListPopupWindow和Spinner可以通过适配器来设置每项的布局风格,当然ListPopupWindow是最灵活的,不但可在左侧显示列表,还能在右侧显示列表。
3、PopMenu可通过子菜单实现多级菜单效果,而ListPopupWindow和Spinner只有一级列表。
4、ListPopupWindow和Spinner可以设置默认选中项,而PopMenu没有默认选中项。
5、Spinner既可以下拉列表来展示,也可以对话框来展示;而PopupMenu和ListPopupWindow只能以下拉列表展示。


从上面可以看出ListPopupWindow的自主性更强一点,所以作者记录一下ListPopupWindow的基本使用:


import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.ListPopupWindow;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener,AdapterView.OnItemClickListener{
    private EditText et_input;
    private Button button;
    private ListPopupWindow listPopup;
    private ListPopupAdapter adapter;
    private List list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list=new ArrayList<>();
        for(int i=0;i<10;i++){
            list.add(i+"");
        }
        initView();
    }

    private void initView() {
        et_input= (EditText) findViewById(R.id.et_input);
        button= (Button) findViewById(R.id.button);
        et_input.setOnClickListener(this);
        button.setOnClickListener(this);
        listPopup=new ListPopupWindow(this);
        adapter=new ListPopupAdapter(this,list);
        listPopup.setAdapter(adapter);
        listPopup.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
        listPopup.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        listPopup.setModal(true);
        listPopup.setOnItemClickListener(this);
    }
//    setModal : 设置显示模式。通常设置为true。
//    setWidth : 设置下拉列表窗口的宽度。
//    setHeight : 设置下拉列表窗口的高度。
//    setAnchorView : 设置下拉列表的参照控件。下拉列表在显示时将展现在参照控件的下方,注意:如果不设置参照控件就直接调用show函数,系统不知道要把下拉列表在何处展示,只能是异常退出了。
//    setDropDownGravity : 设置下拉列表的对齐方式。Gravity.START表示与参照控件左侧对齐,Gravity.END表示与参照控件右侧对齐。注意:该函数只在4.4.2及以上版本中使用。
//    setOnItemClickListener : 设置列表项的点击监听器。
//    show : 显示下拉列表窗口。
//    dismiss : 关闭下拉列表窗口。
//    setOnDismissListener : 设置下拉列表的关闭监听器。
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.et_input:
                if (Build.VERSION.SDK_INT >=  Build.VERSION_CODES.KITKAT) {
                    listPopup.setDropDownGravity(Gravity.END);
                }
                listPopup.setAnchorView(v);
                listPopup.show();
                break;
            case R.id.button:
                if (Build.VERSION.SDK_INT >=  Build.VERSION_CODES.KITKAT) {
                    listPopup.setDropDownGravity(Gravity.START);
                }
                listPopup.setAnchorView(v);
                listPopup.show();
                break;
        }
    }

    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
            Toast.makeText(this, position+"", Toast.LENGTH_SHORT).show();
            if(listPopup!=null){
                listPopup.dismiss();
            }
    }
}

效果图如下:
下拉列表ListPopupWindow_第1张图片
奉上csdn下载地址:http://download.csdn.net/detail/android_zhengyongbo/9842450

你可能感兴趣的:(ListPopupW)