public class PopupFromBottom extends PopupWindow {    /**     * 显示模式.     */    private int showModel;    /**     * 先出现 蒙板 列表后弹出.     */    public static final int PART = 1;    /**     * 列表 和 蒙板 从底部弹出.     */    public static final int SIMULTANEOUSLY = 2;    private final RecyclerView recyclerView;    private Activity activity;    public PopupFromBottom(Activity activity, List<String> list, OnItemClickListener onItemClickListener) {        this(activity, list, 0, onItemClickListener);    }    public PopupFromBottom(Activity activity, List<String> list, int showModel, OnItemClickListener onItemClickListener) {        super(activity);        this.activity = activity;        this.showModel = showModel;        View view = View.inflate(activity, R.layout.popu_list_layout, null);        TextView tvCancel = (TextView) view.findViewById(R.id.tv_cancel_popup);        tvCancel.setOnClickListener((v) -> dismiss()); // 销毁popupWindow        recyclerView = (RecyclerView) view.findViewById(R.id.recycler_popup);        setRecyclerView(list, onItemClickListener);        this.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#66000000"))); // 设置背景为半透明        setOutsideTouchable(true); // 设置外部点击消失        setContentView(view); //设置填充视图        switch (showModel) {            case PART:                setHeight(LinearLayoutCompat.LayoutParams.WRAP_CONTENT); // 设置高度                break;            case SIMULTANEOUSLY:                setHeight(LinearLayoutCompat.LayoutParams.MATCH_PARENT); // 设置高度                break;            default:                setHeight(LinearLayoutCompat.LayoutParams.WRAP_CONTENT); // 设置高度                break;        }        setWidth(LinearLayoutCompat.LayoutParams.MATCH_PARENT); // 设置宽度        setFocusable(true); // 设置获取焦点        setAnimationStyle(R.style.dialog_bottom_default); // 设置进入动画    }    /**     * 设置 recyclerView.     */    private void setRecyclerView(List list, OnItemClickListener onItemClickListener) {        recyclerView.setLayoutManager(new LinearLayoutManager(activity));        recyclerView.setAdapter(new BaseQuickAdapter<String, BaseViewHolder>(R.layout.item_popup, list) {            @Override            protected void convert(BaseViewHolder helper, String item) {                helper.setText(R.id.tv_item_popup, item);            }        });        recyclerView.addOnItemTouchListener(onItemClickListener);    }    /**     * 显示 popupWindow.     */    public void show() {        switch (showModel) {            case PART:                setBackgroundAlpha(0.7f); //设置屏幕透明度                this.setOnDismissListener(() -> setBackgroundAlpha(1.0f));                break;            case SIMULTANEOUSLY:                break;            default:                setBackgroundAlpha(0.5f);//设置屏幕透明度                this.setOnDismissListener(() -> setBackgroundAlpha(1.0f));                break;        }        this.showAtLocation(activity.getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);    }    /**     * 设置添加屏幕的背景透明度     *     * @param bgAlpha 屏幕透明度0.0-1.0 1表示完全不透明     */    private void setBackgroundAlpha(float bgAlpha) {        WindowManager.LayoutParams lp = activity.getWindow().getAttributes();        lp.alpha = bgAlpha;        activity.getWindow().setAttributes(lp);    }}


View 的 布局:

<?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:background="#19000000"    android:gravity="bottom"    android:orientation="vertical">    <android.support.v7.widget.RecyclerView        android:id="@+id/recycler_popup"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="@color/BLACK">    </android.support.v7.widget.RecyclerView>    <TextView        android:id="@+id/tv_cancel_popup"        android:layout_width="match_parent"        android:layout_height="45dp"        android:background="@color/BLACK"        android:drawableTop="@mipmap/popup_div_cancel"        android:gravity="center"        android:text="@string/cancel"        android:textColor="@color/text_color_bind_selector"        android:textSize="18sp" /></LinearLayout>

style :

    <style name="dialog_bottom_default" parent="Animation.AppCompat.Dialog">        <item name="android:windowEnterAnimation">@anim/dialog_bottom_enter</item>        <item name="android:windowExitAnimation">@anim/dialog_bottom_exit</item>    </style>

item 布局:

<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/tv_item_popup"    android:layout_width="match_parent"    android:layout_height="45dp"    android:drawableTop="@mipmap/popup_div_recycler"    android:gravity="center"    android:text="删除"    android:textColor="@drawable/selector_text_color"    android:textSize="16sp"></TextView>

其中使用了 第三方库BaseRecyclerViewAdapterHelper来填充 recyclerView

关于BaseRecyclerViewAdapterHelper 的使用 参考:https://github.com/CymChad/BaseRecyclerViewAdapterHelper






更多相关文章

  1. android多屏幕适配相关知识和官方翻译文档
  2. Android 四种获取屏幕宽度的方法总结
  3. 关于Android屏幕密度与分辨率
  4. Android 根据屏幕大小设置字体
  5. android获取屏幕长宽,status bar高度,设置全屏显示
  6. Android 获得屏幕宽高的三种方式
  7. Android实现屏幕截图并保存截图到指定文件
  8. 【Android Training - 02】适配不同的屏幕[Lesson 1 - 支持不同

随机推荐

  1. deepin20.1发布—细微之处 体验不凡
  2. 深度学习高能干货:手把手教你搭建MXNet框
  3. 想用Python爬小姐姐图片?那你得先搞定分布
  4. 一文看懂数据清洗:缺失值、异常值和重复值
  5. 作品拍卖价碾压毕加索,没有灵魂的AI灵魂画
  6. 「最有用」的特殊大数据:一文看懂文本信息
  7. 一文读懂「中台」的前世今生
  8. CentOS 服务器使用命令对图片进行压缩以
  9. js:事件、留言板、常用字符串函数
  10. 仿某商城手机端页眉页脚代码实例