欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android下拉框PopupWindow使用详解

程序员文章站 2023-12-02 17:49:34
本文实例为大家分享了android下拉框popupwindow展示的具体代码,供大家参考,具体内容如下 activity_main.xml布局 &l...

本文实例为大家分享了android下拉框popupwindow展示的具体代码,供大家参考,具体内容如下

Android下拉框PopupWindow使用详解

activity_main.xml布局

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.spin.mainactivity" >
<edittext
android:id="@+id/et_edittext"
android:layout_width="250dp"
android:layout_height="50dp"
android:layout_centerhorizontal="true"
android:layout_margintop="10dp"
android:text="@string/hello_world" />
<imageview 
android:id="@+id/down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/down_arrow"
android:layout_alignright="@id/et_edittext"
android:layout_margintop="20dp"
android:clickable="true"/>

</relativelayout>

list_item.xml布局

<?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="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" >

<imageview 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/user"/>
<textview 
android:id="@+id/tv_list_item"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="100000000"/>
<imageview
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/delete"/>

</linearlayout>

代码实现

public class mainactivity extends actionbaractivity {

private edittext et_edittext;//编辑框
private imageview down;//下拉按钮
private listview listview;
private list<string> numlist;
private popupwindow popwin; 
private boolean isdown=false;//判断弹窗是否显示 
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main); 
et_edittext = (edittext) findviewbyid(r.id.et_edittext);
down = (imageview) findviewbyid(r.id.down);
//创建集合 储存号码
numlist = new arraylist<string>();
for(int i=0;i<20;i++){
numlist.add("100000000"+i);
} 
initlistview();
//对下拉按钮设置监听 当进行点击时 弹出popwin
down.setonclicklistener(new onclicklistener() { 
@override
public void onclick(view v) {
if(!isdown){
//定义一个popupwindow
popwin=new popupwindow(mainactivity.this);
popwin.setwidth(et_edittext.getwidth());//设置宽度 和编辑框的宽度相同
popwin.setheight(200); //设置高度
//为popwin填充内容
popwin.setcontentview(listview);
//点击popwin区域之外 自动关闭popwin
popwin.setoutsidetouchable(true);
/**
* 设置弹出窗口显示的位置
* 参数一:相对于参数的位置进行显示 即在编辑框的下面显示
* 参数二 三:x y轴的偏移量
*/
popwin.showasdropdown(et_edittext, 0, 0);
isdown=true;
}else{
popwin.dismiss();
isdown=false;
}
}
});
}
//点击返回按钮
@override
public void onbackpressed() {
/**
* 当用户点击返回按钮时 是整个activity退出 而且给人的感觉是直接退出 窗口可能还是显示状态,
为了避免内存泄露,先关闭弹窗 
* 
* 当点击返回按钮时 如果窗口存在且正在显示 则关闭窗口
*/
if(popwin!=null&&popwin.isshowing()){
popwin.dismiss();
}
super.onbackpressed();
}
private void initlistview() {
listview = new listview(this);
//设置listview的背景
listview.setbackgroundresource(r.drawable.listview_background);
//设置条目之间的分割线及滚动条不可见
listview.setdivider(null);
listview.setverticalscrollbarenabled(false);
//设置适配器
listview.setadapter(new mylistadapter());
}
private class mylistadapter extends baseadapter{
@override
public int getcount() {
return numlist==null?0:numlist.size();
}
@override
public view getview(final int position, view convertview, viewgroup parent) {
viewholder holder;
if(convertview==null){
convertview=view.inflate(getapplicationcontext(), r.layout.list_item, null);
holder=new viewholder();
holder.tvnum=(textview) convertview.findviewbyid(r.id.tv_list_item);
holder.delete=(imageview) convertview.findviewbyid(r.id.delete);
convertview.settag(holder);
}else{
holder=(viewholder) convertview.gettag();
}
holder.tvnum.settext(numlist.get(position));
//对删除按钮设置监听事件
holder.delete.setonclicklistener(new onclicklistener() { 
@override
public void onclick(view v) {
//当点击删除按钮时 删除条目
numlist.remove(position);
//刷新listview
mylistadapter.this.notifydatasetchanged();
}
});
//对条目设置监听事件 点击条目后 将num设置到编辑框中
convertview.setonclicklistener(new onclicklistener() { 
@override
public void onclick(view v) {
//点击条目后 将num设置到编辑框中
et_edittext.settext(numlist.get(position));
popwin.dismiss();
}
});
return convertview;
}
@override
public object getitem(int position) {
return null;
}
@override
public long getitemid(int position) {
return 0;
}
}

private class viewholder {
textview tvnum;
imageview delete;
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。