博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android学习笔记---63-PopupWindow,泡泡窗口的实现
阅读量:5815 次
发布时间:2019-06-18

本文共 6848 字,大约阅读时间需要 22 分钟。

转载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>

 

位置图如下:

 

显示效果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

你可能感兴趣的文章
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石 ...
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
如何用纯 CSS 为母亲节创作一颗像素画风格的爱心
查看>>
Linux基础命令---rmdir
查看>>
iOS sqlite3(数据库)
查看>>
粤出"飞龙",打造新制造广东样本
查看>>
编玩边学获数千万元A轮融资,投资方为君联资本
查看>>
蓝图(Blueprint)详解
查看>>
Spark之SQL解析(源码阅读十)
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
比特币系统采用的公钥密码学方案和ECDSA签名算法介绍——第二部分:代码实现(C语言)...
查看>>
海贼王十大悲催人物
查看>>
BigDecimal 舍入模式(Rounding mode)介绍
查看>>
开源 免费 java CMS - FreeCMS1.2-标签 infoSign
查看>>
开源 免费 java CMS - FreeCMS1.9 移动APP生成栏目列表数据
查看>>
虚拟机新增加硬盘,不用重启读到新加的硬盘
查看>>
Java IO流详尽解析
查看>>
邮件服务系列之四基于虚拟用户的虚拟域的邮件系统(安装courier-authlib以及部分配置方法)...
查看>>