用PopupWindow做下拉框

摘要:
最近,我在做一个下拉框。我原本想使用微调器,但微调器未能满足项目要求。我问过我的同学和同事,他们都在使用弹出窗口。我在网上查过了。弹出窗口非常简单,可定制,符合我的要求。因此,我用我在网上读到的代码自己读。写一篇博客以防忘记。首先,使用以下代码编写自定义布局˂?

    最近在做下拉框,本来想用spinner,可是spinner达不到项目要求,跟同学同事问了一圈,都在用popwindow,

网上看了一下,popwindow挺简单的,可定制性挺强的,符合我的要求,所以,借鉴网上看的代码,自己撸了一

遍。写篇博客以防忘记。

    首先,先写个自定义布局,代码如下

用PopupWindow做下拉框第1张用PopupWindow做下拉框第2张
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="110dp"
    android:layout_height="wrap_content">
    <LinearLayout
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_circle_drop_down_qr_code"
        android:orientation="vertical"
        android:layout_marginRight="@dimen/padding_10"
        android:paddingBottom="0dp"
        android:paddingLeft="@dimen/padding_5"
        android:paddingRight="@dimen/padding_5"
        android:paddingTop="@dimen/padding_5">

        <LinearLayout
            android:id="@+id/lin_scan_qr_code"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal"
            android:paddingBottom="@dimen/padding_5"
            android:paddingTop="@dimen/padding_5">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_circle_scan_qr_code" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/padding_10"
                android:gravity="center"
                android:text="扫一扫"
                android:textColor="@color/color_white"
                android:textSize="@dimen/text_16" />
        </LinearLayout>

        <View
            android:layout_width="wrap_content"
            android:layout_height="1px"
            android:layout_marginLeft="@dimen/padding_3"
            android:layout_marginRight="@dimen/padding_3"
            android:background="@color/color_white" />

        <LinearLayout
            android:id="@+id/lin_my_qr_code"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal"
            android:paddingBottom="@dimen/padding_5"
            android:paddingTop="@dimen/padding_5">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_circle_my_qr_code" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/padding_10"
                android:gravity="center"
                android:text="二维码"
                android:textColor="@color/color_white"
                android:textSize="@dimen/text_16" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>
View Code

    第二步,在代码中定义popwindow样式,绑定点击事件,代码如下:

用PopupWindow做下拉框第3张用PopupWindow做下拉框第4张
// // 获取自定义布局文件pop.xml的视图
        View customView = getActivity().getLayoutInflater().inflate(R.layout.lay_circle_pop_drop_down_qr_code,
                null, false);
        // 创建PopupWindow实例,200,150分别是宽度和高度

        mQrCodePopWindow = new PopupWindow(customView, CommonUtil.dipToPx(getContext(),110), ViewGroup.LayoutParams.WRAP_CONTENT,true);
        // 设置动画效果 [R.style.AnimationFade 是自己事先定义好的]
//        popupwindow.setAnimationStyle(R.style.AnimationFade);
//        popupwindow.setTouchable(true);
//        popupwindow.setOutsideTouchable(true);
        mQrCodePopWindow.setBackgroundDrawable(new BitmapDrawable());
        customView.findViewById(R.id.lin_scan_qr_code).setOnClickListener(v -> {
            ToastUtil.show(getContext(),"扫一扫");
            dismissQrCodePopWindow();
        });
        customView.findViewById(R.id.lin_my_qr_code).setOnClickListener(v -> ToastUtil.show(getContext(),"二维码"));
View Code

注意,代码中的true为setFoucusable,如要点击空白处隐藏popwindow的话,setFocusable(true)和setBackground()两者必不可少(亲测)。

    最后,为空间添加点击事件,控制下拉框的显示隐藏,代码如下:

用PopupWindow做下拉框第5张用PopupWindow做下拉框第6张
@OnClick(R.id.lin_top_right)
    public void onClick(View v) {
        if (mQrCodePopWindow != null&& mQrCodePopWindow.isShowing()) {
            mQrCodePopWindow.dismiss();
        } else {
            initQrCodePopWindow();
            mQrCodePopWindow.showAsDropDown(v);
        }
    }
View Code

(由于暂时没有发现好的动画效果,所以没有添加动画,如果大家有发现好的动画,还请告知一二,在此谢过)

效果图:

用PopupWindow做下拉框第7张

免责声明:文章转载自《用PopupWindow做下拉框》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jquery计算时间戳之间的差值,可返回年,月,日,小时等MiniDLNA常用操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vue 开发规范目录及说明

Vue 开发规范目录及说明 Vue 开发规范目录及说明 命名规范 普通变量命名规范 常量 组件命名规范 views 下的文件命名 结构化规范 目录文件夹及子文件规范 vue 文件基本结构 多个特性的元素规范 元素特性的顺序 组件选项顺序 为组件样式设置作用域 注释规范 务必添加注释列表 单行注释 多行注释 模块 指令规范 Props 规...

黑马android

day55 1、AndroidManifest.xml 中对某个Activity设置全屏:android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 2、(image)View.setBackgroundResource() 这种情况会全屏设置背景 3、drawable文件夹下的sele...

Android DeepLink 深度链接技术实现

一、DeepLink 技术介绍 DeepLink,即为深度链接技术,主要应用场景是通过Web页面直接调用Android原生app,并且把需要的参数通过Uri的形式,直接传递给app,节省用户的注册成本。 DeepLink 通常运用于App社交分享、App广告引流、App裂变活动、Web to App、分享效果统计、沉默用户唤醒等场景,对广告引流、活动推广、...

Android视频播放和横竖屏切换

  最近做了一个项目,里面用到了视频播放这一块,当时想考虑Vitamio,demo也做了出来,但是后来发现它是商业收费的,并且收费相当可观,所以只能放弃了。然后找到了ijkPlayer,功能也很强大,最终选择了Wei_Leng基于ijkPlayer开发的superPlayer,在这里也要感谢一下这位无私的博主,贴下他的链接superPlayer 但是因为...

VM安装安卓虚拟机

使用VM安装安卓虚拟机 配置过程 参考链接:VMware实现Android_x86——8.1从安装到使用 具体的工具都可以从 盘点网 下载使用。 VMWARE虚拟机如何打开.VMDK格式的磁盘映像 Android x86开源项目最新版虚拟机镜像下载VM/Vbox 虚拟机里玩谷歌原生版安卓系统...

android studio里面怎么看file explorer啊?

1、打开DDMS ,不同的android studio 外观上有所不同,DDMS哪里打开呢? 如图,在“Tools”菜单下点击“Android”,找到“Android Device Monitor”。 2 点击“Android Device Monitor”,就可以打开DDMS啦。 2、先点击DDMS,在工具栏Window——>show...