如图是效果图

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

补充为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. scp命令限速远程拷贝

    示例: 限速40M拷贝 scp -rl 358400 expdp_all_3schema_20180427* 172.16.16.36:/data/dmpold/

  2. CMakeFiles/species.inc.dir/build.make:57: recipe for target 'CMakeFiles/species.inc' failed

    新装的WSL编译2017.3.4版本的mfix,只要涉及到带化学反应的就会报错: 由于之前从没遇到过,对cmake又不熟悉,所以有些摸不着头脑,后来仔细查看报错提示,发现是在CMakeFiles/sp ...

  3. 浅谈C#数组(一)

    如果需要使用同一类型的多个对象,可以使用数组和集合(后面介绍).C#用特殊的记号声明,初始化和使用数组.Array类在后台发挥作用,它为数组中的元素排序和过滤提供了多个方法.使用枚举器,可以迭代数组中 ...

  4. Oracle之q操作符

    Oracle本身默认的是单引号,但是在大家写存储过程或者写SQL语句时,有时候需要拼SQL或者是SQL的值里需要传入含单引号的值,此时就需要使用两个单引号''''来进行转义,其实oracle本身提供了 ...

  5. centos 7 ssh登录安全问题

    2018-10-11 1.ssh禁止root远程登录 修改ssh配置文件/etc/ssh/sshd_config vim /etc/ssh/sshd_config PermitRootLogin ye ...

  6. datagrip 导出数据库备份到本地

    1.建立自己的数据库 2.如图 3,结果

  7. PIE SDK最小噪声变换

    1.算法功能简介 最小噪声分离变换是用于判定图像数据内在的维数(即波段数),分离数据中的噪声,减少随后处理中的计算需求量. MNF 本质上是两次层叠的主成分变换.第一次变换(基于估计的噪声协方差矩阵) ...

  8. 转 .net 获取IP地址的三个方法的比较

    获取用户IP地址的三个属性的区别(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)   一.没有使用代理服务器的情况: REMOTE_ADDR = 您的 IP    ...

  9. Flask中的的SQLAlchemy

    好久没有更新Blog了 今天来聊一聊 Python 的 ORM 框架 SQLAlchemy 有的孩子已经听说过这个框架的大名了,也听说了 SQLAlchemy 没有 Django 的 Models 好 ...

  10. (转)DB2 restart database命令的作用总结

    DB2 restart database命令的作用总结 原文:https://blog.csdn.net/qingsong3333/article/details/62049039 信息中心对于RES ...