android学习笔记---63-PopupWindow,泡泡窗口的实现
转载http://blog.csdn.net/lidew521/article/details/8976627
PopupWindow是一个可以显示在当前Activity之上的浮动容器,PopupWindow弹出的位置是能够改变的,按照有无偏移量,可以分为无偏移和有便宜两种;按照参照对象的不同又可以分为两种:相对某个控件(Anchor锚点)的位置和在父容器内部的相对位置。
创建Android应用:Project Name:PopupWindow,Android2.2,Application Name:泡泡窗口,Packagename:cn.itcast.popwindow,CreateActivity:MainActivity。
1. 界面
在界面上添加按钮,点击后显示Pop窗口。
/PopupWindow/res/values/strings.xml
<?xml version="1.0"encoding="utf-8"?>
<resources>
<string name="hello">Hello World,MainActivity!</string>
<string name="app_name">泡泡窗口</string>
<string name="button">打开泡泡窗口</string>
</resources>
/PopupWindow/res/layout/main.xml
<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/main"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button"
android:onClick="openPopWindow"
/>
</LinearLayout>
2. 实现按钮点击方法
创建PopupWIndow:
LayoutInflater mLayoutInflater = (LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);
View contentView = mLayoutInflater.inflate(R.layout.xxx,null); //R.layout.xxx为界面文件
popupWindow = newPopupWindow(contentView, ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(newBitmapDrawable());
popupWindow.setFocusable(true);//取得焦点,创建出来的PopupWindow默认无焦点
显示PopupWindow的方法:
showAsDropDown(Viewanchor)相对某个控件的位置(正下方),无偏移
showAsDropDown(Viewanchor, int xoff, int yoff)相对某个控件的位置,有偏移,xoff X轴的偏移量,yoff Y轴的偏移量
showAtLocation(Viewparent, int gravity, int x, int y)在父容器的什么位置,gravity为相对位置,如:正中央Gravity.CENTER、下方Gravity.BOTTOM、Gravity.Right|Gravity.BOTTOM右下方等,后面两个参数为x/y轴的偏移量。
关闭PopupWindow:dismiss()
/PopupWindow/src/cn/itcast/popwindow/MainActivity.java
package cn.itcast.popwindow;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
importandroid.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
importandroid.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ListAdapter;
import android.widget.PopupWindow;
import android.widget.SimpleAdapter;
public class MainActivity extendsActivity {
PopupWindowpopupWindow;
Viewparent;
privateint[] images ={R.drawable.i1,R.drawable.i2,R.drawable.i3,R.drawable.i4,R.drawable.i5,R.drawable.i6,R.drawable.i7,R.drawable.i8};
privateString[] names = {"搜索", "文件管理", "下载管理", "全屏", "网址", "书签", "加入书签", "分享页面"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewcontentView = getLayoutInflater().inflate(R.layout.popwindow, null);
GridView gridView = (GridView) contentView.findViewById(R.id.gridView);
gridView.setAdapter(getAdapter());
gridView.setOnItemClickListener(new ItemClickListener());
popupWindow = new PopupWindow(contentView,ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setFocusable(true);//取得焦点
popupWindow.setBackgroundDrawable(newBitmapDrawable()); //点击空白的地方关闭PopupWindow
popupWindow.setAnimationStyle(R.style.animation);
parent =this.findViewById(R.id.main);
}
private final class ItemClickListener implements OnItemClickListener{
publicvoid onItemClick(AdapterView<?> parent, View view, int position, long id){
if(popupWindow.isShowing())popupWindow.dismiss();//关闭
//....
}
}
private ListAdapter getAdapter() {
List<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();
for(int i = 0 ; i <images.length ; i++ ){
HashMap<String,Object> item = new HashMap<String, Object>();
item.put("image",images[i]);
item.put("name",names[i]);
data.add(item);
}
SimpleAdaptersimpleAdapter = new SimpleAdapter(this, data, R.layout.grid_item,
newString[]{"image", "name"}, new int[]{R.id.imageView,R.id.textView});
returnsimpleAdapter;
}
publicvoid openPopWindow(Viewv){
popupWindow.showAtLocation(parent,Gravity.BOTTOM, 0, 0);
}
}
3. 弹出窗口
/PopupWindow/res/layout/popwindow.xml
<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/bg"
>
<GridView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="4"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:id="@+id/gridView"
/>
</LinearLayout>
/PopupWindow/res/drawable/bg.xml
<?xml version="1.0"encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:endColor="#1DC9CD"
android:startColor="#A2E0FB"/>
<padding
android:left="2dp"
android:top="2dp"
android:right="2dp"
android:bottom="2dp" />
</shape>
GridView:
/PopupWindow/res/layout/grid_item.xml
<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="16sp"
android:textColor="#000099"
android:id="@+id/textView"
/>
</LinearLayout>
4. 使用的图像
/PopupWindow/res/drawable/i1.png

/PopupWindow/res/drawable/i2.png

/PopupWindow/res/drawable/i3.png

/PopupWindow/res/drawable/i4.png

/PopupWindow/res/drawable/i5.png

/PopupWindow/res/drawable/i6.png

/PopupWindow/res/drawable/i7.png

/PopupWindow/res/drawable/i8.png

5. 显示/隐藏的动画
/PopupWindow/res/values/styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="animation">
<itemname="android:windowEnterAnimation">@anim/enter</item>
<itemname="android:windowExitAnimation">@anim/out</item>
</style>
</resources>
/PopupWindow/res/anim/enter.xml
<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromYDelta="100%p"
android:toYDelta="0"
android:duration="500"
/>
<alpha
android:fromAlpha="0.7"
android:toAlpha="1.0"
android:duration="300"
/>
</set>
/PopupWindow/res/anim/out.xml
<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromYDelta="0"
android:toYDelta="100%p"
android:duration="3000"
/>
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.5"
android:duration="2000"
/>
</set>
位置图如下:


显示效果:

版权声明:本文为博主原创文章,未经博主允许不得转载。
android学习笔记---63-PopupWindow,泡泡窗口的实现的更多相关文章
- Android学习笔记之Activity详解
1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...
- 【转】Pro Android学习笔记(十二):了解Intent(下)
解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...
- 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
- Android学习笔记进阶之在图片上涂鸦(能清屏)
Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- udacity android 学习笔记: lesson 4 part b
udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
随机推荐
- Visual Studio写的项目在 IIS 服务器上运行的两种简单方法
首先需要PC上开启了IIS服务,相关方法网上很多,也很简单 第一种:直接在项目中操作 1.创建一个项目,然后右击选中项目,右击,单击属性,打开项目属性标签页面 如图,选择Web标签,在服务器栏目中选中 ...
- Html.ActionLink简单用法(转)
一 Html.ActionLink("要显示的文字","actionName") 该重载的第一个参数是该链接要显示的文字,第二个参数是对应的控制器的方法, 默认 ...
- javascript小数四舍五入
javascript小数四舍五入 1. function get(){ var s = 22.127456 + ""; var str = s.substring(0, ...
- <display>标签的几个属性
<display>这个标签个人觉得挺强大的,但是用不好的话就会成为个累赘,下面给大家分享一下他的几个属性. none:表示此元素不会被显示. block:此元素将显示为块元素,前后会换行. ...
- Lesson 7: Responsive Typography In Action
Lesson 7: Responsive Typography In Action 排版一直都是设计和传达的基础.虽然现在的设计和印刷品设计差别很大,但核心原则还是不变的. Article 1: Bo ...
- JSP学习笔记(1)
JSP本质就是一个servlet,当第一次接受到客户端请求时会被编译成对应的servlet,且对应的每个servlet在容器中只要一个实例. 1.1.JSP注释 <%-- JSP注释部分 --& ...
- BIND9详解之日志篇
在默认情况下,BIND把日志消息写到/var/log/messages文件中,而这些日志消息是非常少的,主要就是启动,关闭的日志记录和一些严重错误的消息,所以要详细记录服务器的运行状况,需要自己配置服 ...
- Jenkins学习之——(3)将项目发送到tomcat
本章节将讲解如何将项目发送到tomcat,实现自动部署. 我只将一个测试的maven项目托管到github上的,不了解git获github的朋友自己百度一下,我也写了一些关于git的文章,希望大家可以 ...
- access 2007 vba 开发中学到的知识(二)
文件的导入和导出 excel 'excel导入Private Sub btnInExcel_Click() Dim strSelectFile As StringWith Application.Fi ...
- zepto源码研究 - ajax.js($.ajaxJSONP 的分析)
简要:jsonp是一种服务器和客户端信息传递方式,一般是利用script元素赋值src来发起请求.一般凡是带有src属性的元素发起的请求都是可以跨域的. 那么jsonp是如何获取服务器的数据的呢? j ...