PopupWindow简单使用
如图是效果图
当点击 “点我”的按钮是 会弹出 如图的 弹窗
补充为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简单使用的更多相关文章
- Android:PopupWindow简单弹窗改进版
Android:PopupWindow简单弹窗 继续上一节的内容,改进一下,目标是点击菜单后把菜单收缩回去并且切换内容,我使用的是PopupWindow+RadioGroup public class ...
- Android:PopupWindow简单弹窗
两布局,一个当前布局页面和一个点击展示布局页面,主程序代码: public class MainActivity extends Activity { private PopupWindow pop; ...
- PopupWindow简单使用(一)
1.构造函数 //方法一: public PopupWindow (Context context) //方法二: public PopupWindow(View conten ...
- 使用android.graphics.Path类自绘制PopupWindow背景
PopupWindow简单介绍 PopupWindow是悬浮在当前activity上的一个容器,用它能够展示随意的内容. PopupWindow跟位置有关的API有以下几个: showAsDropDo ...
- 掘金 Android 文章精选合集
掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...
- PopupWindow的简单使用(结合RecyclerView)
Android弹窗: 在Android中弹出式菜单(以下称弹窗)是使用十分广泛一种菜单呈现的方式,弹窗为用户交互提供了便利.关于弹窗的实现大致有以下两种方式AlertDialog和PopupWindo ...
- Android 属性动画实现一个简单的PopupWindow
1.今天看到一个PopupWindow的效果如图: 2.其实就是属性动画的一个简单实用就ObjectAnimator就可以的,想实现更多,更灵活的可以用ValueAnimator 3.直接上代码: p ...
- Android—PopupWindow的简单使用
PopupWindow 是一个可以显示在当前 Activity 之上的浮动容器,这个Demo要实现的功能是,点击布局中的两个按钮,进而控制PopupWindow的显示与消失,代码中有详细的注释首先看一 ...
- 简单 android popupwindow 实现
1. popupWindow 设置大小: popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT, ViewGr ...
随机推荐
- layer mobile开发layer.full
Layer For Mobile 之 layer.full() 背景介绍:layer mobile是专门针对手机页面开发的一套框架,具体介绍请看官方文档 http://layer.layui.com/ ...
- 创建React工程
下载 main.jsBundle 包curl http://localhost:8081/index.ios.bundle -o main.jsbundle <!DOCTYPE html> ...
- Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.
分析:还是权限问题,所以给他加上权限就可以了!! 解决:chmod +s /bin/netstat
- Qt 学习之路 2(41):model/view 架构
Qt 学习之路 2(41):model/view 架构 豆子 2013年1月23日 Qt 学习之路 2 50条评论 有时,我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应 ...
- python xlwt 与 xlsxwriter 模块差别
Xlwt 模块有一个bug, 就是所用样式过多的话,之后的数据将使用不了样式,相反xlsxwriter 模块 不会有此问题. 用Xlwt模块的同学们,请务必转换用xlsxwriter模块 !!!!!! ...
- rest-framework框架之序列化
rest-framework框架之序列化 开发 API 接口最重要的工作就是将代码片段的输出序列化和反序列化为类似于 json 的表示形式. 在 rest-framework 中,通过声明与 Djan ...
- LeetCode10. 正则表达式匹配
10. 正则表达式匹配 描述 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该 ...
- CentOS7下php安装mcrypt扩展
https://blog.csdn.net/skykingf/article/details/40185405 以下步骤均为本人实际操作,可能与你的安装方法有所区别,但我会尽量排除疑惑) 大致步骤(1 ...
- 执行AJAX返回HTML片段中的JavaScript脚本
如果AJAX加载的数据是一个HTML片段,而且这个HTML片段还包含脚本<script>块,那么在你把这数据xmlHttp.responseText用innerHTML方法插入到当前文档一 ...
- 墨菲定律&吉德林法则&吉尔伯特定律&沃尔森法则&福克兰定律
一.墨菲定律:越害怕什么,就越会发生什么 二.吉德林法则:把问题清楚地写下来,就已经解决一半了 三.吉尔伯特定律:工作中的最大问题就是没人跟你说该如何去做 四.沃尔森法则:把信息和情报排在第一位,金钱 ...