`
104zz
  • 浏览: 1508384 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

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

阅读更多

本实例弹出窗口主要是继承PopupWindow类来实现的弹出窗体,布局可以根据自己定义设计。弹出效果主要使用了translate和alpha样式实现,具体实习如下:

第一步:设计弹出窗口xml:

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical"
  >

<LinearLayout 
    android:id="@+id/pop_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:layout_alignParentBottom="true"
     android:background="@drawable/btn_style_alert_dialog_background"
     >

    
    <Button
        android:id="@+id/btn_take_photo"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:layout_marginTop="20dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="拍照"
        android:background="@drawable/btn_style_alert_dialog_button"
        android:textStyle="bold"
         />

    <Button
        android:id="@+id/btn_pick_photo"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:layout_marginTop="5dip" 
         android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="从相册选择"
         android:background="@drawable/btn_style_alert_dialog_button"
         android:textStyle="bold"
         />

    <Button
        android:id="@+id/btn_cancel"
       android:layout_marginLeft="20dip"
       android:layout_marginRight="20dip"
       android:layout_marginTop="15dip" 
	   android:layout_marginBottom="15dip"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="取消"
       android:background="@drawable/btn_style_alert_dialog_cancel"
       android:textColor="#ffffff"
       android:textStyle="bold"
       
        />
</LinearLayout>
</RelativeLayout>

 第二步:创建SelectPicPopupWindow类继承PopupWindow:

 

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

public class SelectPicPopupWindow extends PopupWindow {


	private Button btn_take_photo, btn_pick_photo, btn_cancel;
	private View mMenuView;

	public SelectPicPopupWindow(Activity context,OnClickListener itemsOnClick) {
		super(context);
		LayoutInflater inflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		mMenuView = inflater.inflate(R.layout.alert_dialog, null);
		btn_take_photo = (Button) mMenuView.findViewById(R.id.btn_take_photo);
		btn_pick_photo = (Button) mMenuView.findViewById(R.id.btn_pick_photo);
		btn_cancel = (Button) mMenuView.findViewById(R.id.btn_cancel);
		//取消按钮
		btn_cancel.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				//销毁弹出框
				dismiss();
			}
		});
		//设置按钮监听
		btn_pick_photo.setOnClickListener(itemsOnClick);
		btn_take_photo.setOnClickListener(itemsOnClick);
		//设置SelectPicPopupWindow的View
		this.setContentView(mMenuView);
		//设置SelectPicPopupWindow弹出窗体的宽
		this.setWidth(LayoutParams.FILL_PARENT);
		//设置SelectPicPopupWindow弹出窗体的高
		this.setHeight(LayoutParams.WRAP_CONTENT);
		//设置SelectPicPopupWindow弹出窗体可点击
		this.setFocusable(true);
		//设置SelectPicPopupWindow弹出窗体动画效果
		this.setAnimationStyle(R.style.AnimBottom);
		//实例化一个ColorDrawable颜色为半透明
		ColorDrawable dw = new ColorDrawable(0xb0000000);
		//设置SelectPicPopupWindow弹出窗体的背景
		this.setBackgroundDrawable(dw);
		//mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框
		mMenuView.setOnTouchListener(new OnTouchListener() {
			
			public boolean onTouch(View v, MotionEvent event) {
				
				int height = mMenuView.findViewById(R.id.pop_layout).getTop();
				int y=(int) event.getY();
				if(event.getAction()==MotionEvent.ACTION_UP){
					if(y<height){
						dismiss();
					}
				}				
				return true;
			}
		});

	}

}
 

第三步:编写MainActivity类实现测试:

 

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class MainActivity extends Activity {

	//自定义的弹出框类
	SelectPicPopupWindow menuWindow;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) this.findViewById(R.id.text);
        //把文字控件添加监听,点击弹出自定义窗口
        tv.setOnClickListener(new OnClickListener() {			
			public void onClick(View v) {
				//实例化SelectPicPopupWindow
				menuWindow = new SelectPicPopupWindow(MainActivity.this, itemsOnClick);
				//显示窗口
				menuWindow.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置
			}
		});
    }
    
    //为弹出窗口实现监听类
    private OnClickListener  itemsOnClick = new OnClickListener(){

		public void onClick(View v) {
			menuWindow.dismiss();
			switch (v.getId()) {
			case R.id.btn_take_photo:
				break;
			case R.id.btn_pick_photo:				
				break;
			default:
				break;
			}
			
				
		}
    	
    };
    
}
 

第四:运行效果如下:


  • 大小: 25.4 KB
10
6
分享到:
评论
8 楼 小火车LRZ 2015-12-07  
很好的一个案例 ,不过弹出对话框时设置整个页面变暗的处理方式有点太随意了吧
7 楼 liu5622460 2014-07-18  
东西是不错,,但是如果换成文本框,弹出输入法后,就会有问题,,界面上去了就下不来了,没办法恢复成刚刚弹出来的样子
6 楼 超级賽亞人 2013-09-06  
如何把它写在menu菜单里面
5 楼 Csloving.com 2013-09-03  
没法实际使用 作为demo演示是不错的
4 楼 wangtoo520 2013-08-16  
非常棒。。。。。。。。。
3 楼 嘟嘟橙 2013-06-20  
新手学习,感谢分享.
2 楼 hubenshan 2013-05-18  
真心感谢感谢啊!!!!
1 楼 423884605 2013-03-26  
有具体的代码吗

相关推荐

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

    在本教程中,我们将深入探讨如何利用`PopupWindow`实现从底部弹出或滑出的选择菜单或窗口,以及如何设置背景为灰色透明。 首先,我们需要理解`PopupWindow`的基本概念。`PopupWindow`是Android SDK中的一个类,它...

    Android从屏幕底部弹出PopupWindow

    总的来说,实现"Android从屏幕底部弹出PopupWindow"涉及到Android UI组件、动画机制和事件处理等多个知识点,需要开发者具备扎实的Android基础和一定的动画设计能力。通过不断实践和学习,可以创造出更多富有创意的...

    Android PopupWindow实现右侧、左侧和底部弹出菜单

    以上就是使用PopupWindow在Android中实现右侧、左侧和底部弹出菜单的基本流程。通过自定义布局、动画和交互,你可以创建出符合应用风格的个性化菜单。记得在实际开发中根据具体需求进行调整,确保弹出菜单的易用性和...

    Android从底部弹出的popupwindow效果

    本文将深入探讨如何利用`PopupWindow`来实现从屏幕底部弹出的自定义效果,以及相关的编程技巧。 首先,了解`PopupWindow`的基本概念。`PopupWindow`是Android提供的一个类,它可以在当前Activity的视图之上显示一个...

    myandroidmenu_PopupWindow实现Android应用的弹出菜单.rar

    - 底部弹出选项:在主界面下方弹出一系列操作选项,如微信聊天中的表情选择。 - 上拉菜单:在按钮上滑动出现更多功能,例如在搜索框右侧的下拉图标。 - 弹出提示:显示一些短暂的信息或操作确认。 3. **创建...

    简单实用Android底部菜单滑出popupwindow案例

    本案例聚焦于如何实现一个简单的、从底部滑出的PopupWindow,它能以动画形式展示菜单项,且易于集成到任何应用程序中。下面将详细介绍实现这个功能的关键知识点。 1. PopupWindow基础: PopupWindow是Android中的...

    Android popupWindow仿微信弹出效果

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来实现各种弹窗效果,如下拉菜单、提示信息等。在这个项目中,我们将详细探讨如何使用`PopupWindow`来模仿微信应用中的弹出效果,使用户界面更加生动...

    popupWindow控件下面显示阴影实现和底部弹出pop.zip

    这个"popupWindow控件下面显示阴影实现和底部弹出pop.zip"资源包,显然包含了如何在PopupWindow下方添加阴影效果以及如何自定义底部弹出的PopupWindow的示例代码和教程。 首先,我们来详细了解PopupWindow的基本...

    popupwindow实现底部弹框

    通常我们会选择Activity的根布局作为父视图,并将Gravity参数设为BOTTOM,使得PopupWindow从底部弹出。而隐藏PopupWindow则简单地调用dismiss()方法即可。 为了实现交互,需要监听PopupWindow中的按钮点击事件。这...

    安卓Android源码——PopupWindow模仿UC底部Menu.zip

    在安卓开发中,`PopupWindow` 是一个非常实用的组件,它可以用来创建浮动窗口,类似于弹出菜单或者对话框。这个压缩包中的示例代码,是关于如何使用 `PopupWindow` 模仿UC浏览器底部的菜单设计。我们将深入探讨 `...

    仿QQ空间底部弹出菜单

    在Android应用开发中,设计和实现用户界面是至关重要的,其中一种常见的交互方式就是底部弹出菜单。"仿QQ空间底部弹出菜单"是借鉴了QQ空间应用中的一个功能,它能够提供一种优雅的方式来展示多个操作选项,通常用于...

    android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果

    PopupWindow是Android SDK提供的一种轻量级窗口组件,它可以灵活地显示在屏幕的任意位置,非常适合用来创建弹出式菜单或提示。 首先,我们需要了解PopupWindow的基本用法。创建PopupWindow时,通常需要传入一个视图...

    PopupWindow从底部滑动的效果

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来创建弹出式窗口,类似于浮动对话框或下拉菜单。在这个项目中,我们将学习如何实现一个从底部滑动弹出的效果,就像我们在微信中看到的消息提示那样。...

    Android应用源码之PopupWindow模仿UC底部Menu.zip

    在Android应用开发中,PopupWindow是一个非常重要的组件,它能够以弹出窗口的形式展示内容,类似于浮动对话框或下拉菜单。本项目“Android应用源码之PopupWindow模仿UC底部Menu”是针对这一功能的一个实例,它展示了...

    Android弹出式窗口(PopupWindow)

    在Android应用开发中,PopupWindow是一个非常重要的组件,它允许开发者在主界面之上显示一个临时的、可定制的视图,通常用于实现类似下拉菜单、提示信息或操作选择的效果。这个组件使得用户界面更加丰富多变,提升了...

    Android-BottomMenu底部弹出窗口

    在Android开发中实现BottomMenu,我们可以使用系统提供的`android.widget.PopupWindow`或者自定义布局配合`FragmentManager`来创建底部弹出窗口。下面我们将详细介绍这两种实现方式及其相关知识点。 ### 1. 使用`...

    dialog 弹出窗和底部弹出窗的实现和动画效果

    在许多应用中,底部弹出窗(如底部菜单或消息提示)提供了一种非侵入性的交互方式。我们可以自定义一个`PopupWindow`来实现这种效果。`PopupWindow`允许我们在屏幕上的任何位置显示一个视图,并且可以设置动画效果:...

    Android高级应用源码-PopupWindow模仿UC底部Menu.zip

    这个示例项目中,PopupWindow被设计成底部弹出的样式,模拟了UC浏览器底部菜单的交互效果。通常这样的设计需要在用户触摸屏幕特定区域时显示,当用户点击其他地方或者再次触摸相同区域时隐藏。实现这种效果需要监听...

Global site tag (gtag.js) - Google Analytics