如图是效果图

当点击 “点我”的按钮是   会弹出 如图的 弹窗

补充为PopupWindow设置一个显示动画和消失的动画

先在anim的文件下分别设置显示和消失的动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > <translate
android:duration="500"
android:fromXDelta="0%"
android:toXDelta="0%"
android:fromYDelta="100%"
android:toYDelta="0%" />
<!-- <alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="500"
android:startOffset="500"/> --> </set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="100%"
android:duration="500" />
</set>

再在style内写其他的

    <style name="popwin_anim_style">
<item name="android:windowEnterAnimation">@anim/popshow</item>
<item name="android:windowExitAnimation">@anim/pophide</item>
</style>
            //创建PopupWindow实例,同时传入弹出窗口的显示高度和宽度以及是否设置焦点
popupWindow = new PopupWindow(infView,LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT,true);
//如果不设置PopupWindow背景,无论是点击外部区域还是Back键都没法dismiss弹窗
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//设置显示的动画
popupWindow.setAnimationStyle(R.style.popwin_anim_style);

主代码如下    布局xml  就是只有一个 Button

 package org.xml.popdemo;

 import ogg.huanxin.huadong.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainPopWindow extends Activity implements OnClickListener {
private Button popButton;
private PopWindowForAttr popWindowForAttr; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main_popwindow);
popButton=(Button)super.findViewById(R.id.popbutton);
popButton.setOnClickListener(this);
popWindowForAttr = new PopWindowForAttr(this);
} @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.popbutton:
popWindowForAttr.showAsDropDown(v);
break;
default:
break; }
}
}
 package org.xml.popdemo;

 import ogg.huanxin.huadong.R;
import android.app.ActionBar.LayoutParams;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.PopupWindow.OnDismissListener; public class PopWindowForAttr implements OnClickListener, OnDismissListener {
private Context context;
private PopupWindow popupWindow;
private Button addCart, doCart;
private final int AddReduce = 1;
private TextView Popreduce, Popnum, Popadd;
private ImageButton deleteButton; public PopWindowForAttr(Context context) {
this.context = context;
// 自定义的一个控件作为显示内容
View contentView = LayoutInflater.from(context).inflate(
R.layout.popupwindowdemo, null);
//
addCart = (Button) contentView.findViewById(R.id.addCart);
doCart = (Button) contentView.findViewById(R.id.doCart);
Popreduce = (TextView) contentView.findViewById(R.id.pop_reduce);
Popnum = (TextView) contentView.findViewById(R.id.pop_num);
Popadd = (TextView) contentView.findViewById(R.id.pop_add);
deleteButton = (ImageButton) contentView.findViewById(R.id.delete);
// 各组件绑定事件
addCart.setOnClickListener(this);
doCart.setOnClickListener(this);
Popreduce.setOnClickListener(this);
Popadd.setOnClickListener(this);
deleteButton.setOnClickListener(this);
// 将加载的视图view载入PopubWindow,并且设置popupwindow这个组件的动画效果
popupWindow = new PopupWindow(contentView, LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT, true);
// 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// 当popWindow消失时的监听
popupWindow.setOnDismissListener(this);
} public void showAsDropDown(View v) {
// showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
// showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
// showAtLocation(View parent, int gravity, int x, int
// y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
popupWindow.showAtLocation(v, Gravity.BOTTOM, 100, 100);
// 设置setFocusable(true),要不然点击弹窗其他地方以及返回键,弹窗都不会退出
// 也才能让popupWindow里面的布局控件获得点击的事件,否则就被它的父亲view给拦截了
popupWindow.setFocusable(true);
//这个方法时设置popupWindow以外的区域可以相应触摸事件,比如我们重写了触摸事件去做一些别的操作,但首先Focusable是true。
popupWindow.setOutsideTouchable(true);
popupWindow.update(); } // 销毁
@Override
public void onDismiss() {
// TODO Auto-generated method stub
popupWindow.dismiss();
} @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.addCart:
Toast.makeText(context, "添加到购物车", Toast.LENGTH_SHORT).show();
break;
case R.id.doCart:
Toast.makeText(context, "立即购买", Toast.LENGTH_SHORT).show();
break;
case R.id.delete:
onDismiss();
break;
case R.id.pop_reduce:
if (!Popnum.getText().toString().equals("1")) {
String num_ReduceString = Integer.valueOf(Popnum.getText()
.toString()) - AddReduce + "";
Popnum.setText(num_ReduceString);
} else {
Toast.makeText(context, "您买入的数量不能低于1", Toast.LENGTH_SHORT)
.show();
}
break;
case R.id.pop_add:
if (!Popnum.getText().toString().equals("1000")) {
String numString = Integer.valueOf(Popnum.getText().toString())
+ AddReduce + "";
Popnum.setText(numString);
}
break;
default:
break;
}
}
}
 <?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="match_parent"
android:background="#FFFFFF"
android:orientation="vertical"
android:paddingLeft="15dp"
android:paddingRight="15dp" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="10dp" > <ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitCenter"
android:src="@drawable/d" /> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:orientation="vertical" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="现售价:¥49.00"
android:textSize="15sp" /> <TextView
android:id="@+id/kucun"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingTop="4dp"
android:text="库存为:987"
android:textSize="12sp" />
</LinearLayout> <ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/delete"
android:layout_weight="1"
android:background="@null"
android:padding="4dp"
android:src="@drawable/delete" />
</LinearLayout> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#eee"
android:orientation="horizontal" > <TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="1dp"
android:text="购买数量" /> <TextView
android:id="@+id/pop_reduce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:paddingTop="10dp"
android:text="-"
android:color="#000000" /> <TextView
android:id="@+id/pop_num"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:text="1"
android:textColor="#000000" /> <TextView
android:id="@+id/pop_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:paddingTop="10dp"
android:text="+"
android:textColor="#000000" />
</LinearLayout> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" > <Button
android:id="@+id/addCart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/png_3"
android:paddingBottom="10dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="10dp"
android:text="加入购物车"
android:textColor="@android:color/white" /> <Button
android:id="@+id/doCart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/png_3"
android:paddingBottom="10dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="10dp"
android:text="立即购买"
android:textColor="@android:color/white" />
</LinearLayout> </LinearLayout>

另外一种常见的方式  当点击一个下拉箭头  会出现的一个popowind 如下拉选择

下拉选择

1 假如listview的item中有Button,ImageButton,CheckBox等会强制获取焦点的view,这时listview的item无法获取焦点,从而无法被点击

解决方法    在item的根布局增加以下的属性android:descendantFocusability="blocksDescendants"设置后,Button获取焦点,item中的其他控件页可以获取焦点了

如下是主要代码

 package com.ithello.xiala;

 import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView; /**
* 实现下拉选择的控件
*
* @author Administrator
*
*/
public class MainActivity extends Activity implements OnClickListener {
/**文本编辑框*/
private EditText editText;
/**下拉的图标点击可以出现弹窗*/
private ImageView imageView;
/**弹窗中的list数据*/
private List<String> list = new ArrayList<String>();
/***/
private ListView listView;
/**弹窗PopupWindow*/
private PopupWindow popupWindow;
/**弹窗PopupWindow的默认高度*/
private int popupWindowHight = 300; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.mainactivity);
setView();
setData();
} private void setView() {
// TODO Auto-generated method stub
editText = (EditText) findViewById(R.id.edt_main);
imageView = (ImageView) findViewById(R.id.iv); imageView.setOnClickListener(this);
} private void setData() {
// TODO Auto-generated method stub
// 初始化数据
for (int i = 0; i < 15; i++) {
list.add(900000 + i + "");
} listView = new ListView(this);
listView.setVerticalScrollBarEnabled(false);// 隐藏listview的滚动条
listView.setBackgroundColor(Color.parseColor("#E6E6E6"));
listView.setDivider(new ColorDrawable(Color.WHITE));
         listView.setDividerHeight(1);
MyAdapter adapter = new MyAdapter();
listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Log.d("jiejie", arg2 + "");
editText.setText(list.get(arg2));
popupWindow.dismiss();
}
});
} /**
* 显示一个PopupWindow
*/
private void showNumPopu() {
if (popupWindow == null) {
popupWindow = new PopupWindow(listView, editText.getWidth(),
popupWindowHight);
}
// 要让其中的view获取焦点,必须设置为true
popupWindow.setFocusable(true);
// 还必须设置一个背景图片
popupWindow.setBackgroundDrawable(new BitmapDrawable());
// 设置点击外部点击消失
popupWindow.setOutsideTouchable(true);
popupWindow.showAsDropDown(editText, 0, 0);
} @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.iv:
showNumPopu();
break; default:
break;
}
} // list的适配器
private class MyAdapter extends BaseAdapter { @Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
} @Override
public View getView(final int position, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
final View view = View.inflate(MainActivity.this,
R.layout.item_list, null);
TextView tv_number = (TextView) view.findViewById(R.id.item_text);
ImageView iv_delete = (ImageView) view
.findViewById(R.id.item_image);
tv_number.setText(list.get(position));
iv_delete.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.d("jiejie", "position " + position);
list.remove(position);
notifyDataSetChanged();
int listviewHeight = view.getHeight() * list.size();
popupWindow.update(
editText.getWidth(),
listviewHeight > popupWindowHight ? popupWindowHight
: listviewHeight); if (list.size() == 0) {
imageView.setVisibility(View.INVISIBLE);
popupWindow.dismiss();
} }
});
return view;
} }
}
<?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="match_parent"
android:background="#000"
android:orientation="vertical" > <RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp" > <EditText
android:id="@+id/edt_main"
android:layout_width="180dp"
android:layout_height="40dp"
android:hint=""
android:background="#fff"
android:paddingRight="20dp" /> <ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@id/edt_main"
android:layout_centerVertical="true"
android:contentDescription="@null"
android:padding="5dp"
android:src="@drawable/spread" />
</RelativeLayout> </LinearLayout>

PopupWindow简单使用的更多相关文章

  1. Android:PopupWindow简单弹窗改进版

    Android:PopupWindow简单弹窗 继续上一节的内容,改进一下,目标是点击菜单后把菜单收缩回去并且切换内容,我使用的是PopupWindow+RadioGroup public class ...

  2. Android:PopupWindow简单弹窗

    两布局,一个当前布局页面和一个点击展示布局页面,主程序代码: public class MainActivity extends Activity { private PopupWindow pop; ...

  3. PopupWindow简单使用(一)

    1.构造函数 //方法一:     public PopupWindow (Context context)     //方法二:     public PopupWindow(View conten ...

  4. 使用android.graphics.Path类自绘制PopupWindow背景

    PopupWindow简单介绍 PopupWindow是悬浮在当前activity上的一个容器,用它能够展示随意的内容. PopupWindow跟位置有关的API有以下几个: showAsDropDo ...

  5. 掘金 Android 文章精选合集

    掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...

  6. PopupWindow的简单使用(结合RecyclerView)

    Android弹窗: 在Android中弹出式菜单(以下称弹窗)是使用十分广泛一种菜单呈现的方式,弹窗为用户交互提供了便利.关于弹窗的实现大致有以下两种方式AlertDialog和PopupWindo ...

  7. Android 属性动画实现一个简单的PopupWindow

    1.今天看到一个PopupWindow的效果如图: 2.其实就是属性动画的一个简单实用就ObjectAnimator就可以的,想实现更多,更灵活的可以用ValueAnimator 3.直接上代码: p ...

  8. Android—PopupWindow的简单使用

    PopupWindow 是一个可以显示在当前 Activity 之上的浮动容器,这个Demo要实现的功能是,点击布局中的两个按钮,进而控制PopupWindow的显示与消失,代码中有详细的注释首先看一 ...

  9. 简单 android popupwindow 实现

    1. popupWindow 设置大小: popupWindow = new  PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT, ViewGr ...

随机推荐

  1. hdu_1051 Wooden Sticks 贪心

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  2. Java 实现发送邮件

    javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl). ...

  3. VIA格式转COCO格式

    VIA是一款很好用的标注软件,基于网页,不过现在开源的大多数目标检测器都是基于COCO训练和测试的,我们如果想要训练自己的数据集,要么修改源代码,要么将自己的标注格式改成COCO格式,采用第一种方法很 ...

  4. hdu6437 Videos 费用流

    题目传送门 题目大意: 给出n,每天有n个小时.有m种电影,每个电影有开始时间和结束时间,和01两种种类,k个人,每一部电影只能被一个人看,会获得一个快乐值wi,如果一个人连续看两部相同种类的电影,快 ...

  5. [转] 用javascript修改css伪类的几种方法

    用javascript修改css伪类的几种方法: Modify pseudo element styles with JavaScript http://pankajparashar.com/post ...

  6. ubuntu中安装kernel-devel

    kernel-devel is a RedHat and derivatives package. In Ubuntu you may need to install the linux-kernel ...

  7. Jmeter4.0----HTTP Cookie管理器(9)

    1.说明 在脚本编写的过程中,我们常常会遇到用户登录之后的相关操作,但是又不想去通过脚本先模拟用户登录,再使用cookie值保持登录,做后续的操作的情况下,我们就会用到HTTP Cookie管理. H ...

  8. GreenPlum 大数据平台--备份-邮件配置-gpcrondump & gpdbrestore(五)

    01,备份 生成备份数据库 [gpadmin@greenplum01 ~]$ gpcrondump -l /gpbackup/back2/gpcorndump.log -x postgres -v [ ...

  9. 【3dsMax安装失败,如何卸载、安装3dMax 2016?】

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  10. Ubuntu Server 14 配置

    语言 在虚拟机中安装了Ubuntu Server. Ubuntu Server只有控制台,没有图形界面.要在控制台下安装中文支持很麻烦.所以直接设置为英文,反正我看得懂. 在安装的时候必须将" ...