█ 【安卓学习之UI学习】PopupWindow实现筛选框
█ 相关文章:
-
● 【android学习开源项目之BasePopup】BasePopup(PopupWindow)进行二次封装
● 【android学习开源项目之AndroidAutoSize】AndroidAutoSize和DialogFragment的适配
● 【安卓学习之UI学习】 自定义组合控件View 的开发
● 【安卓学习之UI学习】 自定义 弧形等级进度条
● 【安卓学习之UI学习】RecyclerView的使用总结
● 【安卓学习之UI学习】TabLayout的使用总结
● 【安卓学习之UI学习】Dialog的使用总结
█ 读前说明:
-
● 本文通过学习别人写demo,学习一些课件,参考一些博客,’学习相关知识,如果涉及侵权请告知
● 本文只简单罗列相关的代码实现过程
● 涉及到的逻辑以及说明也只是简单介绍,主要当做笔记,了解过程而已
● 下载demo
█ 想要实现的效果
-
● 想要实现的效果(以下是boss直聘App的首页图)
● 最终实现的效果图:
█ 实现过程
-
● 界面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:orientation="vertical"
android:padding="0dp">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="请筛选类型"
android:textColor="#333333"
android:textSize="14dp"
android:visibility="gone" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/ppp_order_filter_recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:overScrollMode="never" />
<!--底部按钮-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:padding="5dp">
<!--重置-->
<Button
android:id="@+id/ppp_order_filter_reset_btn"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:background="@drawable/bg_order_filter_bottom_white_css"
android:text="重置"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<!--确定-->
<Button
android:id="@+id/ppp_order_filter_ok_btn"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/bg_order_filter_bottom_blue_css"
android:text="确定"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/ppp_order_filter_cover"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:alpha="0.3"
android:background="#000000"
android:orientation="horizontal" />
</LinearLayout>
● 自定义PopupWindow
public class FilterPopupWindow extends PopupWindow {
private Context context;
private RecyclerView recyclerView;
List<FilterBean> mList;
FilterRecyclerAdapter mAdapter;
View.OnClickListener mListener;
public FilterPopupWindow(Context context, List<FilterBean> list, View.OnClickListener listener) {
super(context);
this.context = context;
this.mList = list;
this.mListener = listener;
initPPP();
}
private void initPPP() {
View inflate = View.inflate(context, R.layout.ppp_order_filter, null);
mAdapter = new FilterRecyclerAdapter(context, mList);
recyclerView = inflate.findViewById(R.id.ppp_order_filter_recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
recyclerView.setAdapter(mAdapter);
inflate.findViewById(R.id.ppp_order_filter_reset_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (FilterBean item : mList) {
item.setCheck(-1);
}
mAdapter.notifyDataSetChanged();
}
});
inflate.findViewById(R.id.ppp_order_filter_cover).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
if (mListener != null) {
inflate.findViewById(R.id.ppp_order_filter_ok_btn).setOnClickListener(mListener);
}
setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
setContentView(inflate);
setFocusable(true);
setTouchable(true);
setOutsideTouchable(true);
setBackgroundDrawable(new ColorDrawable());
}
}
● 使用
private FilterPopupWindow orderFilterPopupWindow;
private void showOrderFilterDialog() {
mPopupWindow = new FilterPopupWindow(this, list, new View.OnClickListener() {
@Override
public void onClick(View v) {
mPopupWindow .dismiss();
......
}
});
mPopupWindow .setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
mPopupWindow = null;
}
});
mPopupWindow .showAsDropDown(mToolbar);
}
█ 相关资料:
● 1. 2017-09-11 弹出PopupWindow后的阴影部分_向阳-fighting的博客-CSDN博客
转载请注明出处:
https://blog.csdn.net/ljb568838953/article/details/111848948