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源码结构图:
有问题或者需要完整源码的可私信我