现在的位置: 首页 > 综合 > 正文

android学习笔记—63-PopupWindow,泡泡窗口的实现

2018年04月05日 ⁄ 综合 ⁄ 共 7097字 ⁄ 字号 评论关闭

PopupWindow是一个可以显示在当前Activity之上的浮动容器,PopupWindow弹出的位置是能够改变的,按照有无偏移量,可以分为无偏移和有便宜两种;按照参照对象的不同又可以分为两种:相对某个控件(Anchor锚点)的位置和在父容器内部的相对位置。

创建Android应用:Project NamePopupWindowAndroid2.2Application Name:泡泡窗口,Packagenamecn.itcast.popwindowCreateActivityMainActivity

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.BOTTOMGravity.Right|Gravity.BOTTOM右下方等,后面两个参数为x/y轴的偏移量。

关闭PopupWindowdismiss()

/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>

位置图如下:

显示效果:

抱歉!评论已关闭.