用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)

    

用PopupWindow实现弹出菜单是一个比较好的方式。当然我们还有一个类PopupMenu也能实现弹出菜单,但那个太过于局限了,所以不是很推荐。

这个实例的效果是这样的:点击按钮后,一个菜单从屏幕的右边滑入到屏幕中,点击按钮/空白处后菜单消失。

布局文件时一个按钮,我就不贴出代码了。下面是菜单的布局:

<?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:orientation="horizontal" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3" />

    <Button
        android:id="@+id/closet_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="关闭" />

</LinearLayout>

MainActivity.java

package com.kale.popup;

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
    LayoutInflater inflater = null;
    private PopupWindow popupWindow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        initPopWindow();
    }

    /**
     * 初始化popWindow
     * */
    private void initPopWindow() {
        View popView = inflater.inflate(R.layout.menu, null);
        popupWindow = new PopupWindow(popView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        popupWindow.setBackgroundDrawable(new ColorDrawable(0));
        //设置popwindow出现和消失动画
        popupWindow.setAnimationStyle(R.style.PopMenuAnimation);
        Button btn01 = (Button)popView.findViewById(R.id.button1);
        btn01.setOnClickListener(this);
        Button btn02 = (Button)popView.findViewById(R.id.button2);
        btn02.setOnClickListener(this);
        Button btn03 = (Button)popView.findViewById(R.id.button3);
        btn03.setOnClickListener(this);
        Button closetBtn = (Button)popView.findViewById(R.id.closet_btn);
        closetBtn.setOnClickListener(this);

    }

    public void buttonListener(View v) {
        showPop(v, 0, 0, 0);
    }

    /**
     * 显示popWindow
     * */
    public void showPop(View parent, int x, int y,int postion) {
        //设置popwindow显示位置
        popupWindow.showAsDropDown(parent);
        //获取popwindow焦点
        popupWindow.setFocusable(true);
        //设置popwindow如果点击外面区域,便关闭。
        popupWindow.setOutsideTouchable(true);
        popupWindow.update();

    }

    @Override
    public void onClick(View v) {
        Button btn = (Button) v;
        Toast.makeText(MainActivity.this, btn.getText(), 0).show();
        popupWindow.dismiss();
    }

}

菜单的动画

style.xml

    <style name="PopMenuAnimation" parent="@android:style/Animation">
        <item name="android:windowEnterAnimation">@anim/slide_left_in</item>
        <item name="android:windowExitAnimation">@anim/slide_right_out</item>
    </style>

slide_left_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="200"
        android:fromXDelta="100.0%p"
        android:toXDelta="0.0" />

</set>

slide_right_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="100"
        android:fromXDelta="0.0"
        android:toXDelta="100.0%p" />

</set>

用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局),布布扣,bubuko.com

时间: 2024-10-26 01:51:48

用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)的相关文章

【Android】android PopupWindow实现从底部弹出或滑出选择菜单或窗口

转载自:android PopupWindow实现从底部弹出或滑出选择菜单或窗口 Android PopupWindow的使用和分析 Popupwindow的使用 PopupWindow用法

android利用PopupWindow实现点击工具栏弹出下拉菜单

1.概述 本文将介绍如何利用PopupWindow实现点击屏幕顶部工具栏按钮弹出下拉菜单的功能.先上图: 2.代码实现 首先是activity_main.xml布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width=&qu

android PopupWindow实现从底部弹出或滑出选择菜单或窗口

本实例弹出窗口主要是继承PopupWindow类来实现的弹出窗体,布局可以根据自己定义设计.弹出效果主要使用了translate和alpha样式实现,具体实习如下: 第一步:设计弹出窗口xml: Xml代码   <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

爱淘宝手机版分类导航菜单弹出效果设计

来和大家一起讨论讨论爱淘宝手机版的分类导航菜单弹出效果是如何设计实现的.先来看几个截图,一个是爱淘宝官方网站的截图,另一部分是我仿照爱淘宝做的截图 先声明一下我们只是借鉴爱淘宝手机版界面来进行技术的学习,如有博友看到请各位一定要理解.此博客毫无盗用淘宝核心技术. 第一张图是爱淘宝官网的截图,后面两张是我们自己仿照做的截图. 首先分析一下要实现的功能细节 点击手机页面商品列表的图片,导航菜单会从手机的右侧出来 导航菜单下面会有一个遮盖层,这样子的作用防止用户点击最底层的商品 最底层的商品可以在遮盖

弹出层或者下拉菜单被下面的 层遮挡住了解决办法

弹出层或者下拉菜单被下面的<div>层,或者jquery图片切换屋遮挡住了解决办法.这个一般是屋设置了position属性,如POSITION: relative;解决这个办法在当前层设置z-index都是无效的,即使将弹出层所在父层的z-index设置到999,可弹出层依然会被底下的div遮挡住. 造成这个原因是层的叠加原因,叠加原则中指出,非同辈元素,任意一者或其祖元素拥有动态定位时,同时各自向上寻找动态定位的祖元素,并分别从中拿出具备最高级别的祖元素(或其本身)进行比较.所以根据层的叠加

通过KVO来监听键盘弹出和弹回

在通知中心建立一个广播来监听键盘的弹出和弹回,在监听事件中加入触发事件的一些操作. [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil]; [[NSNotificationCenter defaultCenter]addObserver:self sele

position定位解决弹框拖拽出屏幕的情况

position定位有四种情况: 1 static默认情况,没有定位,元素正常出现在文档流中. 2 fixed 绝对定位 元素的位置相对于浏览器窗口是固定位置. 即使窗口是滚动的它也不会移动:定位脱离文档流,不占据位置. 3 relative相对定位,相对其正常位置,还在文档流中,占据位置. 相对定位元素经常被用来作为绝对定位元素的容器块. 4 absolute绝对定位 绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于<html> 定位脱离文档流,不

数据库建模模板、菜单显示出问题解决方案

数据库建模模板.菜单显示出问题解决方案 您使用的是哪个版本? 要查找您使用的 Visio 版本,请在"帮助"菜单上单击"关于 Microsoft Office Visio".版本的名称会显示在对话框最上面的文本行中. Standard     此版本不包含"数据库模型图"模板. Professional     此版本支持"数据库模型图"模板的反向工程功能(即在 Visio 中使用现有数据库创建模型),但是不支持正向工程功能(

Slideout.js – 触摸滑出式 Web App 导航菜单

Slideout.js 是为您的移动 Web 应用开发的触摸滑出式的导航菜单.它没有依赖,自由搭配简单的标记,支持原生的滚动,您可以轻松地定制它.它支持不同的 CSS3 转换和过渡.最重要的是,它只是4KB . 在线演示      源码下载 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScript 特效 Web 开发中很实用的10个效果[源码下载] 12款经典的白富美型 jQuer