`

android之PopupWindow

阅读更多




用的豌豆荚截图,本来是个动画的,每个过程都有几张,大概就是要实现这个效果,初始状态只有一个Button,当点击show的时候,另外一个页面从底部慢慢升起来,直到覆盖到上一个页面,注意这里不是启用另一个Activity,是用的PopupWindow,当点击dismiss的时候,又慢慢消失。。。这种效果看上去不错,PopupWindow上面可以添加想要添加的控件,比如ListView(注意,如果添加ListView的话,当它弹出来之后,按back键不起作用,它获取不了监听,其余的非ListView控件可以,这里添加了个Button ),下面贴出代码

这是主类MainActivity.java
package com.test.popupwindow;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout.LayoutParams;
import android.widget.PopupWindow;

publicclass MainActivity extends Activity {
    /** Called when the activity is first created. */

    boolean flag =false;
    PopupWindow popupWindow;

    @Override
    publicvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        init();
    }

    publicvoid init() {
        Button btn_show = (Button) findViewById(R.id.btn_show);
        LayoutInflater inflater = LayoutInflater.from(this);
        View layout = inflater.inflate(R.layout.popup, null);
        popupWindow =new PopupWindow(layout, LayoutParams.FILL_PARENT,
                LayoutParams.FILL_PARENT);
        Button btn_dismiss = (Button) layout.findViewById(R.id.btn_dismiss);
        btn_dismiss.setOnClickListener(new OnClickListener() {

            @Override
            publicvoid onClick(View v) {
                // TODO Auto-generated method stub
                openMenu();
            }
        });
        btn_show.setOnClickListener(new OnClickListener() {

            @Override
            publicvoid onClick(View v) {
                // TODO Auto-generated method stub
                openMenu();
            }
        });
    }

    publicvoid btn_showOnClicked() {
        openMenu();
    }

    publicvoid btn_dismissOnClicked() {
        openMenu();
    }

    publicvoid openMenu() {
        if (!flag) {
            popupWindow.setAnimationStyle(R.style.PopupAnimation);
            popupWindow.showAtLocation(findViewById(R.id.btn_show), Gravity.NO_GRAVITY, 0, 0);
            popupWindow.setFocusable(true);
            popupWindow.update();
            flag =true;
        } else {
            popupWindow.dismiss();
            popupWindow.setFocusable(false);
            flag =false;
        }
    }
}


布局文件main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/layout"
    >
    <Button
        android:id="@+id/btn_show"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="show"
        />
</RelativeLayout>

布局文件popup.xml
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="#cccccc" 
    > 
    <Button 
        android:id="@+id/btn_dismiss"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="dismiss"/>
</LinearLayout>




注意看在res文件夹下面新建了一个anim文件夹,里面要实现的动画页面,比如从哪个坐标移动到哪个坐标之类的,当然还可以定义其它的,这里只实现了Y坐标的移动

在anim文件夹下面建两个文件,一个是in.xml,另外一个是out.xml,意思一看就明白
in.xml
<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator">
    <translate 
        android:fromYDelta="854" 
        android:toYDelta="0"
        android:duration="1000"/>
</set>

它表示Y的坐标从854(因为我的手机分辨率是850x480,摩托MB525)移动到0,时间为1秒
out.xml
<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <translate android:interpolator="@android:anim/decelerate_interpolator"
        android:fromYDelta="0"
        android:toYDelta="854" 
        android:duration="10000"
    />
</set>

有人给我反应说缺少style文件,我看了一下,确实是,当时发贴的时候漏掉了,现在补上

在values文件夹下面建一个styles.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
     <style name="PopupAnimation" parent="android:Animation" mce_bogus="1">      
         <item name="android:windowEnterAnimation">@anim/in</item>  
        <item name="android:windowExitAnimation">@anim/out</item>  
    </style>
</resources>

本文转自:http://www.cnblogs.com/and_he/archive/2011/08/12/2136107.html
分享到:
评论

相关推荐

    android 之popupWindow的使用

    首先,PopupWindow是一个可以浮动在Activity之上的窗口,它不依赖于任何布局,可以自由地显示在屏幕的任何位置。通过PopupWindow,开发者可以实现各种各样的弹出菜单、下拉选择器等效果。它的灵活性在于能够自定义...

    Android之PopupWindow

    **Android之PopupWindow详解** `PopupWindow`是Android系统中一个非常实用的UI组件,它允许开发者在界面上弹出一个浮动窗口,通常用于显示临时信息或者创建下拉菜单等交互效果。本篇将深入讲解`PopupWindow`的使用...

    android popupwindow 底部灰色背景

    PopupWindow不是视图(View)而是视图组(ViewGroup),它可以包含任意的布局,并且可以设置为浮现在其他视图之上。它的主要构造函数接受一个View、宽度和高度作为参数,用于指定PopupWindow的内容、大小。 要创建...

    Android 多级PopupWindow的小demo.zip

    首先,PopupWindow是Android SDK中的一个类,它允许开发者创建一个可以浮动在Activity之上的窗口。通常用于实现下拉菜单、提示框等效果。与Dialog相比,PopupWindow更加灵活,可以在界面上任何位置显示,并且能够...

    android:PopupWindow的使用

    在Android开发中,`PopupWindow`是一个非常实用的组件,它允许我们创建浮动、弹出式的视图,常用于下拉菜单、浮层提示等场景。`PopupWindow`提供了丰富的自定义选项,使得开发者可以轻松地调整其外观和行为。在本篇...

    android自定义通用PopupWindow

    在Android开发中,`PopupWindow` 是一个非常实用的组件,它允许我们创建弹出式窗口,用于显示一些临时信息或者交互操作。本教程将详细讲解如何封装一个通用的`PopupWindow`,以便在项目中复用,降低代码冗余,提高...

    android的popupWindow使用

    在Android开发中,PopupWindow是一个非常实用的组件,它能够帮助开发者实现类似气泡提示、下拉菜单等弹出窗口效果。本篇文章将详细介绍如何在Android应用中使用PopupWindow,并通过一个具体的案例来演示其基本用法。...

    Android PopupWindow与Activity之间的数据传递.zip

    在Android开发中,PopupWindow和Activity是两个非常重要的组件。PopupWindow通常用于创建浮动窗口,如下拉菜单、提示框等,而Activity则是应用程序的基本单元,承载着用户界面和业务逻辑。两者之间的数据传递是实现...

    Android的PopupWindow

    1. **Android之popupWindow入门** 在Android应用中,首先我们需要在布局文件中定义PopupWindow的内容视图,然后在Java代码中实例化PopupWindow对象。实例化时需要传入内容视图的父视图(通常是根布局)和宽度、高度...

    Android从屏幕底部弹出PopupWindow

    在Android开发中,PopupWindow是一种常用的UI组件,它可以在屏幕上的任意位置显示一个浮动窗口,通常用于实现类似下拉菜单、提示框等效果。在这个场景中,我们要实现的是从屏幕底部弹出的PopupWindow,并带有滑动...

    android自定义popupwindow仿微信

    在Android开发中,自定义PopupWindow是一种常见的交互方式,它能提供类似对话框的效果,但比对话框更灵活,可以自由地控制显示位置和样式。本篇内容将深入讲解如何模仿微信的PopupWindow实现,以增强应用的用户体验...

    Android用PopupWindow实现弹出listview形式菜单

    在Android开发中,有时我们需要创建一个可自定义的弹出菜单,这通常通过使用`PopupWindow`类来实现。`PopupWindow`是Android系统提供的一个轻量级窗口,它可以显示在屏幕上的任意位置,用于创建浮动、弹出式的UI组件...

    Android PopupWindow泡泡效果(有listview)

    在Android开发中,PopupWindow是一个非常实用的组件,它能够创建一种浮现在当前视图之上的窗口效果,常用于实现下拉菜单、提示框等。本篇将详细讲解如何利用PopupWindow实现一个具有泡泡效果,并且包含ListView的...

    Android开发之PopupWindow实现弹窗

    ### Android开发之PopupWindow实现弹窗 在Android应用开发中,`PopupWindow`是一个非常实用且灵活的组件,用于创建自定义的弹出窗口。它允许开发者在一个任意位置展示一个包含自定义视图的浮动窗口,这使得它可以...

    android自定义popupwindow仿微信右上角弹出菜单效果

    在Android开发中,`PopupWindow` 是一个非常实用的组件,它可以用来创建各种弹出式菜单或对话框。本文将详细介绍如何使用`PopupWindow`在Android应用中模仿微信右上角的弹出菜单效果。 首先,我们需要理解`...

    android自定义PopupWindow

    在Android开发中,`PopupWindow` 是一个非常实用的组件,它允许我们在界面中弹出一个浮动窗口,常用于创建下拉菜单、提示信息或模拟对话框等效果。本篇文章将详细探讨如何自定义 `PopupWindow` 实现类似微信弹框类别...

    android使用popupwindow自定义menu菜单

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来创建弹出式窗口,为用户提供临时的交互界面,比如模拟系统级的下拉菜单、快捷操作菜单等。本篇将详细介绍如何在Android中利用`PopupWindow`来实现...

    Android TV 开发有关PopupWindow的KeyListener

    PopupWindow是Android提供的一个类,用于在当前视图之上显示一个浮动窗口。这个窗口可以包含任何View,比如一个自定义布局,一个ListView,甚至只是一个简单的TextView。通过设置PopupWindow的位置、大小和背景,...

    Android弹窗实现之Popupwindow及DialogFragment

    Android弹窗实现之Popupwindow及DialogFragment。创建并实现PopupWindow布局 实现PopupWindow对象实例 设置PopupWindow背景、动画属性、控件实现及事件监听 显示PopupWindow及位置设定。

    Android自定义PopupWindow日历 日期时间选择器 可自由搭配年月日时分显示

    `PopupWindow`是Android系统提供的一种轻量级弹出窗口,它可以悬浮在当前Activity之上,用于展示临时或快速交互的信息。与Dialog不同,`PopupWindow`可以更灵活地控制布局和显示效果。 创建自定义日历日期时间选择...

Global site tag (gtag.js) - Google Analytics