下拉列表ListPopupWindow

来源:互联网 发布:编程模拟蚂蚁寻找甜品 编辑:程序博客网 时间:2024/05/06 19:32

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<String> 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();            }    }}

效果图如下:
这里写图片描述
奉上csdn下载地址:http://download.csdn.net/detail/android_zhengyongbo/9842450

0 0
原创粉丝点击