`

实现在android的popupwindow中显示listview

阅读更多
之前我实现了在listview中显示图片和checkbox,具体看这儿:http://gqdy365.iteye.com/blog/992340

接下来我将上述listview添加到popupwindow窗口中。关于这个listview我就再不多说了,主要是实现popupwindow和美化popupwindow。

先看看我做截图:



1、创建一个popupwindow,并设置相应的样式。
private void popAwindow(View parent) {
		if (window == null) {
			LayoutInflater lay = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			View v = lay.inflate(R.layout.popupwindow, null);
			v.setBackgroundDrawable(getResources().getDrawable(R.drawable.rounded_corners_view));
			
			//初始化按钮
			submit = (Button) v.findViewById(R.id.submit);
			submit.setOnClickListener(submitListener);
			cancel = (Button) v.findViewById(R.id.cancel);
			cancel.setOnClickListener(cancelListener);
			
			//初始化listview,加载数据。
			list=(ListView)v.findViewById(R.id.lv);
			MyAdapter adapter=new MyAdapter(Main.this);
			list.setAdapter(adapter);
			list.setItemsCanFocus(false);
			list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
			list.setOnItemClickListener(listClickListener);
			
			window = new PopupWindow(v, 500,260);
		}
		
		//设置整个popupwindow的样式。
		window.setBackgroundDrawable(getResources().getDrawable(R.drawable.rounded_corners_pop));
		//使窗口里面的空间显示其相应的效果,比较点击button时背景颜色改变。
		//如果为false点击相关的空间表面上没有反应,但事件是可以监听到的。
		//listview的话就没有了作用。
		window.setFocusable(true);//如果不设置setFocusable为true,popupwindow里面是获取不到焦点的,那么如果popupwindow里面有输入框等的话就无法输入。
		window.update();
		window.showAtLocation(parent, Gravity.CENTER_VERTICAL, 0, 0);
	}

	OnItemClickListener listClickListener = new OnItemClickListener() {
		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			ViewHolder vHollder = (ViewHolder) view.getTag();
			// 在每次获取点击的item时将对于的checkbox状态改变,同时修改map的值。
			vHollder.cBox.toggle();
			MyAdapter.isSelected.put(position, vHollder.cBox.isChecked());
		}
	};

注意:popupwindow的showAtLocation()方法的第一个参数是popupwindow显示的父窗口,可以通过:findViewById()获取当前布局。将该view作为参数传递给popupwindow。
给按钮添加监听事件:
OnClickListener submitListener = new OnClickListener() {
		@Override
		public void onClick(View v) {
			//这儿可以写提交数据的代码。
			closeWindow();
		}
	};

	OnClickListener cancelListener=new OnClickListener(){
		@Override
		public void onClick(View v){
			closeWindow();
		}
	};
	
	private void closeWindow(){
		//将每个checkbox的标记改为false,以便下次弹出window时是初始的状态。
		for (int j = 0; j < MyAdapter.isSelected.size(); j++) {
			MyAdapter.isSelected.put(j, false);
			ViewHolder vHollder = (ViewHolder) list.getChildAt(j).getTag();
			vHollder.cBox.setChecked(false);
		}
		//提交数据时关闭popupwindow。
		if (window != null) {
			window.dismiss();
		}
	}



在layout中新建popupwindow.xml文件,具体内容如下,主要是对window的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
    	android:id="@+id/tip" 
    	android:layout_width="wrap_content" 
    	android:layout_height="wrap_content"
    	android:layout_gravity="center"
    	android:textSize="18dip"
    	android:background="@drawable/rounded_corners_list"
    	android:text="这是一个popupWindow的例子"/>
    	<!-- 如果layout_width的值为fill_parent时,居中要用android:gravity="center"-->
	<ListView
		android:id="@+id/lv"
    	android:layout_width="fill_parent" 
    	android:layout_height="wrap_content"
    	android:background="@drawable/rounded_corners_list"/>
    <LinearLayout
    	android:orientation="horizontal"
    	android:layout_gravity="center"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:background="@drawable/rounded_corners_list">
    	<Button 
    		android:id="@+id/submit" 
    		android:layout_width="100dip" 
    		android:layout_height="50dip" 
    		android:text="提交"/>
    	<Button 
	    	android:id="@+id/cancel" 
    		android:layout_width="100dip" 
    		android:layout_height="50dip" 
    		android:text="取消"/>
    </LinearLayout>
</LinearLayout>


其中listView的布局的布局和实现请参考文章开头提到的另一篇文章。
新建rounded_corners_pop.xml,用于自定义窗口的样式文件,具体内容如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
	<solid android:color="#ffffffff" />
	<stroke android:width="3dp" color="#ffff8080" />
	<corners android:radius="10dp" />
	<padding 
		android:left="3dp"
		android:top="3dp" 
		android:right="3dp"
		android:bottom="3dp" />
</shape>

这个就可以实现圆角的样式,周围的白边是通过在白的样式上面叠加黑色的来实现的。
其他样式文件大家可以参考上面的rounded_corners_pop.xml自己写。

2、在main.xml中添加按钮,一个用于显示window,一个用于隐藏window
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/lmain"
    >
    <Button 
    	android:id="@+id/myButton1" 
    	android:layout_width="100dip" 
    	android:layout_height="50dip" 
    	android:text="显示"/>
    <Button 
    	android:id="@+id/myButton2" 
    	android:layout_width="100dip" 
    	android:layout_height="50dip" 
    	android:text="隐藏"/>
</LinearLayout>

在activity中初始化这两个按钮,并添加监听事件:

	OnClickListener bPop = new OnClickListener() {
		@Override
		public void onClick(View v) {
			popAwindow(v);
		}
	};

	OnClickListener boff = new OnClickListener() {
		@Override
		public void onClick(View v) {
			if(window!=null){
				window.dismiss();
			}
		}
	};
  • 大小: 58.1 KB
分享到:
评论
5 楼 珠帘闭幕西山雨 2015-05-15  
代码都不全
4 楼 gqdy365 2011-07-01  
ericslegend 写道
支持楼主,下来先看看这几部分分别是怎么实现的

你试试这样可以吗?
LayoutInflater lay = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		View v = lay.inflate(R.layout.dialog_window_layout, null);
		final PopupWindow p = new PopupWindow(v,LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		p.setBackgroundDrawable(new ColorDrawable(0));
		
		TextView name=(TextView)v.findViewById(R.id.dialog_name);
3 楼 hoozh 2011-07-01  
ggdy你好,我是android和java的初学者,我继承了PopupWindow,想把类似 listClickListener 这些接口放在继承的子类里面,这样程序主Actibity代码比较少,看起来清爽一点,但是我发现在PopupWindow的子类里没法使用findViewById函数,不知有什么办法没有?
2 楼 gqdy365 2011-04-14  
heji 写道
不错,谢谢分享。其实有这么一句话就行了new PopupWindow(v, 500,260); 其他的都很easy~~~支持楼主!共勉

恩,是的,但我第一次做的时候很多事实想不到的,呵呵,所以我觉得也有和我一样遇到此类问题的,分享给这些人!大侠们见笑了!
1 楼 heji 2011-04-12  
不错,谢谢分享。其实有这么一句话就行了new PopupWindow(v, 500,260); 其他的都很easy~~~支持楼主!共勉

相关推荐

    实现在android的popupwindow中显示listview.docx编程资料

    ### 实现在Android的PopupWindow中显示ListView #### 一、简介 在Android开发过程中,PopupWindow是一种非常实用的UI组件,它可以用来展示临时性的信息或者菜单等。本篇文档主要介绍如何在PopupWindow中集成一个...

    实现在android的popupwindow中显示listview.docx

    在 Android 中实现_popupwindow_显示_listview_ 在 Android 开发中,PopupWindow 是一个常用的组件,用于显示临时信息或提供用户交互。然而,在 PopupWindow 中显示 ListView 可能会遇到一些问题。本文将介绍如何在...

    popupwindow中显示listview自适配

    至此,我们已经实现了在PopupWindow中显示自适应的ListView。但为了提升用户体验,可能还需要对ListView进行一些优化,比如添加头尾视图、设置分割线、监听条目点击事件等。此外,考虑到性能问题,ListView通常会...

    Android: PopupWindow 上显示 ListView 并相应 Demo

    本示例将详细介绍如何在PopupWindow上显示一个ListView,并实现与之相关的交互功能,模仿QQ登录界面,虽然仍有待改进,但基本功能已经实现。 首先,让我们了解PopupWindow的基本概念。PopupWindow是Android提供的一...

    Android用PopupWindow实现弹出listview形式菜单

    在Android开发中,有时我们需要创建一个可自定义的弹出菜单,这通常通过使用`PopupWindow`类来实现。`PopupWindow`是Android系统提供的一个轻量级窗口,它可以显示在屏幕上的任意位置,用于创建浮动、弹出式的UI组件...

    Android之用PopupWindow实现弹出listview形式的菜单

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来实现各种形式的弹出窗口,如下拉菜单、提示框等。本教程将详细讲解如何使用`PopupWindow`来创建一个以`ListView`形式展示的菜单。首先,我们需要...

    Android 点击listview弹出popupwindow弹出框

    在Android开发中,`ListView`是一种常用的组件,用于展示大量数据列表。而`PopupWindow`则是用来实现临时显示一个小窗口的工具,常用于快速操作或者下拉菜单等场景。本篇将详细介绍如何在用户点击`ListView`时弹出一...

    popupWindow显示listview后,自适配

    通过以上步骤,我们就成功地在PopupWindow中实现了ListView的自适应显示。这个过程涉及了PopupWindow、ListView、Adapter和布局测量等多个关键点,理解并熟练掌握这些知识点对于Android开发中的交互设计至关重要。

    Android PopupWindow泡泡效果(有listview)

    在这个布局中,我们还需要为ListView指定一个适配器,适配器负责将数据转化为ListView中的项。常见的适配器有ArrayAdapter、BaseAdapter等,这里我们可以根据实际需求选择合适的适配器实现。 创建好ListView布局后...

    PopupWindow_ListView_Singleselect.zip

    通过以上步骤,我们可以实现一个具有单选功能的`PopupWindow`,并在`ListView`中展示数据。这样的设计在许多场景下都非常有用,如下拉菜单、选项选择等。在实际开发中,可以根据需求对这个示例进行扩展和优化,例如...

    popupwindow中用listView绑定数据并显示在View上方

    在Android开发中,PopupWindow是一个非常实用的组件,它能够创建一个浮动的窗口,通常用于在主界面之上显示一些临时性的信息或者交互操作。在这个场景中,我们将探讨如何在PopupWindow中使用ListView来展示数据,并...

    AndroidListView+PopupWindow实现item点击弹出PopupWindow

    AndroidListView+PopupWindow实现item点击弹出PopupWindow 博客地址:https://blog.csdn.net/dreams_deng/article/details/104618270

    PopupWindow嵌套ListView

    至此,我们已经实现了`PopupWindow`嵌套`ListView`的功能,同时也解决了`ListView`的宽度自适应问题,并介绍了如何在Android Studio中创建9.png图片。这个示例对于理解和应用`PopupWindow`与`ListView`的结合有着...

    PopupWindow和ListView配合使用

    在Android开发中,`PopupWindow`和`ListView`是两种常用组件,它们结合使用可以创建出丰富的交互式界面。`PopupWindow`是一个可以显示在任意位置的浮动窗口,而`ListView`则是一种可滚动的视图,用于展示大量数据。...

    PopupWindow+ListView实现Android搜索框

    `PopupWindow`是Android中的一个类,它允许开发者创建可弹出的窗口,这种窗口可以在屏幕上的任意位置显示,并且可以设置背景透明或者不透明,适合用来创建各种临时的、浮动的UI元素。在我们的场景中,`PopupWindow`...

    PopupWindow之显示顶层对话框代码

    在实际应用中,PopupWindow常常与AdapterView(如ListView、RecyclerView)结合使用,当用户点击某一项时弹出。还可以通过调整PopupWindow的背景颜色和透明度,使其看起来像一个悬浮的对话框。 综上所述,...

    PopupWindow+ListView+在item顶部与底部跳跃

    PopupWindow和ListView是Android开发中常用的两种组件,它们在实现丰富的用户交互时起着关键作用。本篇文章将深入探讨如何将PopupWindow与ListView结合使用,让ListView的item在顶部与底部之间实现动态跳跃效果。 ...

    PopupWindow+ListView

    在Android开发中,`PopupWindow` 和 `ListView` 是两种常用组件,它们分别用于实现弹出窗口和可滚动列表的功能。结合使用时,可以创建出交互性更强的UI设计,如下拉菜单、浮层选择器等。让我们深入探讨如何在Android...

    android 实现右上角PopupWindow弹出

    在Android应用开发中,PopupWindow是一个非常实用的组件,它能提供一种轻量级的对话框效果,可以在屏幕上的任意位置弹出,并且可以自定义其内容和样式。本示例将详细介绍如何实现一个位于右上角、类似QQ设置功能的...

    Android自定义下拉框(PopupWindow实现)

    在Android开发中,有时我们需要创建具有特定样式和功能的组件,比如自定义的下拉框。本篇将详细讲解如何使用PopupWindow实现一个定制化的下拉框。 首先,理解PopupWindow的基本概念。PopupWindow是Android提供的一...

Global site tag (gtag.js) - Google Analytics