android用PopWindow做下拉框实例代码
程序员文章站
2024-02-21 22:55:28
最近在做下拉框,本来想用spinner,可是spinner达不到项目要求,跟同学同事问了一圈,都在用popwindow,网上看了一下,popwindow挺简单的,可定制性挺...
最近在做下拉框,本来想用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>
第二步,在代码中定义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(),"二维码"));
注意,代码中的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); } }
(由于暂时没有发现好的动画效果,所以没有添加动画,如果大家有发现好的动画,还请告知一二,在此谢过)
效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。