zoukankan      html  css  js  c++  java
  • 用PopupWindow做下拉框

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

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

    遍。写篇博客以防忘记。

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

    <?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样式,绑定点击事件,代码如下:

    // // 获取自定义布局文件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()两者必不可少(亲测)。

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

    @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

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

    效果图:

  • 相关阅读:
    asp.net mvc 国际化(2) 解决问题
    asp.net mvc 国际化(1) 国际化的基础
    Silverlight自学笔记布局基础
    ASP.NET MVC form验证
    Expression Tree 入门
    JQuery 思维导图
    HashMap的Put方法(二)
    HashMap的构造函数(三)
    HashMap的数据结构(一)
    HashMap之扩容resize(四)
  • 原文地址:https://www.cnblogs.com/shenchanghui/p/6289012.html
Copyright © 2011-2022 走看看