Android开发下拉框列表效果

186 阅读1分钟
Android开发下拉框列表效果

比如搜索功能,往往需要下拉框列表功能

一、思路:

用PopupWindow,这样可以定位在搜索框下方

二、效果图:

在这里插入图片描述

三、关键代码:
// 联系:893151960
public class MainActivity extends AppCompatActivity {

    LinearLayout ll_select_doctor;
    ImageView iv_arrow_report;
    TextView tv_report_type;

    private SpinnerPopWindow mSpinnerDoctorWindow;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        iv_arrow_report = findViewById(R.id.iv_arrow_report);
        tv_report_type = findViewById(R.id.tv_report_type);
        ll_select_doctor = findViewById(R.id.ll_select_doctor);

        mSpinnerDoctorWindow = new SpinnerPopWindow(this);
        List<String> doctors = Arrays.asList("李xx","张xx","陈xx","石xx","李1xx","张1xx","陈1xx","石1xx");
        mSpinnerDoctorWindow.refreshData(doctors);

        mSpinnerDoctorWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
                iv_arrow_report.setImageResource(R.mipmap.arrow_down);
            }
        });

        mSpinnerDoctorWindow.setItemListener(new DoctorSpinnerAdapter.IOnItemSelectListener() {
            @Override
            public void onItemClick(final int pos) {
                tv_report_type.setText(doctors.get(pos));

            }
        });
        ll_select_doctor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (null != mSpinnerDoctorWindow) {
                    mSpinnerDoctorWindow.setWidth(ll_select_doctor.getWidth());
                    // 记得在这赋值一个固定高度,超过的listview可以滑动
                    mSpinnerDoctorWindow.setHeight(Dp2Px(MainActivity.this,200));
                    mSpinnerDoctorWindow.showAsDropDown(ll_select_doctor);
                }
                if (null != iv_arrow_report)
                    iv_arrow_report.setImageResource(R.mipmap.arrow_up);
            }
        });
    }

    public static int Dp2Px(Context context, float dp) {
        return (int) (dp * context.getResources().getDisplayMetrics().density + 0.5f);
    }
}
四、项目demo源码结构图:

在这里插入图片描述
有问题或者需要完整源码的可私信我