使用BottomSheet和listView组合完成
private void showSelectorDialog() {
// 创建 BottomSheetDialog 对象
final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this);
// 获取底部列表的布局
View bottomSheetView = getLayoutInflater().inflate(R.layout.bottom_sheet_layout, null);
// 设置底部列表的布局
bottomSheetDialog.setContentView(bottomSheetView);
//点击弹框外部,弹框不消失
bottomSheetDialog.setCanceledOnTouchOutside(false);
// 获取ListView
ListView listView = bottomSheetView.findViewById(R.id.list_view);
// 创建适配器
CustomAdapter adapter = new CustomAdapter(this,YourList);
// 设置适配器
listView.setAdapter(adapter);
// 处理列表项的点击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 处理列表项的点击事件
XXX
bottomSheetDialog.dismiss(); // 点击后关闭底部列表
}
});
// 显示底部列表
bottomSheetDialog.show();
// 取消
TextView cancel = bottomSheetView.findViewById(R.id.tv_cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//处理取消事件
bottomSheetDialog.dismiss();
}
});
}
创建列表项的适配器CustomAdapter
public class CustomAdapter extends ArrayAdapter<SignServerInfo> {
private List<SignServerInfo> objects;
public CustomAdapter(Context context, List<SignServerInfo> objects) {
super(context, 0, objects);
this.objects = objects;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_layout, parent, false);
}
// 获取当前位置的对象
SignServerInfo item = objects.get(position);
// 在布局中找到需要显示数据的视图,并设置对应的数据
TextView textView = convertView.findViewById(R.id.list_text_view);
textView.setText(item.getProjectName());
// 可以继续设置其他视图的数据
return convertView;
}
列表布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<View
android:layout_width="match_parent"
android:layout_height="5dp"
android:background="@color/line" />
<TextView
android:id="@+id/tv_cancel"
android:layout_width="match_parent"
android:layout_height="60dp"
android:paddingBottom="12dp"
android:paddingTop="12dp"
android:gravity="center"
android:text="取消"
android:textColor="#999999"
android:textSize="14sp" />
</LinearLayout>
列表项布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item_layout"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:gravity="center"
android:id="@+id/list_text_view"
android:layout_width="match_parent"
android:layout_height="@dimen/public_space_value_45">
</TextView>
</LinearLayout>