当前位置: 移动技术网 > IT编程>移动开发>Android > Android下拉框PopupWindow使用详解

Android下拉框PopupWindow使用详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

最好的气功功法,天才小捣蛋2中文版,372潜艇断崖处险

本文实例为大家分享了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;
}
}

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网