`

android popwindow实现左侧弹出菜单层

 
阅读更多

http://www.yoyong.com/archives/613

学习一下PopupWindow的浮层显示效果。

PopupWindow可以实现浮层效果,主要方法有:可以自定义view,通过LayoutInflator方法;可以出现和退出时显示动画;可以指定显示位置等。

为了将PopupWindow的多个功能展现并力求用简单的代码实现,编写了一个点击按钮左侧弹出菜单的功能,实现出现和退出时显示动画效果并点击其他区域时弹出层自动消失,效果图如下:


图-1 android 实现左侧弹出菜单的功能

源码:

1.PopwindowOnLeftActivity.java

  1. package com.pop.main;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.MotionEvent;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.view.View.OnTouchListener;  
  9. import android.widget.Button;  
  10. import android.widget.PopupWindow;  
  11.   
  12. public class PopwindowOnLeftActivity extends Activity {  
  13. // 声明PopupWindow对象的引用  
  14. private PopupWindow popupWindow;  
  15.   
  16. /** Called when the activity is first created. */  
  17. @Override  
  18. public void onCreate(Bundle savedInstanceState) {  
  19. super.onCreate(savedInstanceState);  
  20. setContentView(R.layout.main);  
  21. // 点击按钮弹出菜单  
  22. Button pop = (Button) findViewById(R.id.popBtn);  
  23. pop.setOnClickListener(popClick);  
  24. }  
  25. //点击弹出左侧菜单的显示方式  
  26. OnClickListener popClick = new OnClickListener() {  
  27.   
  28. @Override  
  29. public void onClick(View v) {  
  30. // TODO Auto-generated method stub  
  31. getPopupWindow();  
  32. // 这里是位置显示方式,在按钮的左下角  
  33. popupWindow.showAsDropDown(v);  
  34. // 这里可以尝试其它效果方式,如popupWindow.showAsDropDown(v,  
  35. // (screenWidth-dialgoWidth)/2, 0);  
  36. // popupWindow.showAtLocation(findViewById(R.id.layout),  
  37. // Gravity.CENTER, 0, 0);  
  38. }  
  39. };  
  40.   
  41. /** 
  42. * 创建PopupWindow 
  43. */  
  44. protected void initPopuptWindow() {  
  45. // TODO Auto-generated method stub  
  46.   
  47. // 获取自定义布局文件pop.xml的视图  
  48. View popupWindow_view = getLayoutInflater().inflate(R.layout.pop, null,  
  49. false);  
  50. // 创建PopupWindow实例,200,150分别是宽度和高度  
  51. popupWindow = new PopupWindow(popupWindow_view, 200150true);  
  52. // 设置动画效果  
  53. popupWindow.setAnimationStyle(R.style.AnimationFade);  
  54. //点击其他地方消失  
  55. popupWindow_view.setOnTouchListener(new OnTouchListener() {  
  56. @Override  
  57. public boolean onTouch(View v, MotionEvent event) {  
  58. // TODO Auto-generated method stub  
  59. if (popupWindow != null && popupWindow.isShowing()) {  
  60. popupWindow.dismiss();  
  61. popupWindow = null;  
  62. }  
  63. return false;  
  64. }  
  65. });  
  66. // pop.xml视图里面的控件  
  67. Button open = (Button) popupWindow_view.findViewById(R.id.open);  
  68. Button save = (Button) popupWindow_view.findViewById(R.id.save);  
  69. Button close = (Button) popupWindow_view.findViewById(R.id.close);  
  70. // pop.xml视图里面的控件触发的事件  
  71. // 打开  
  72. open.setOnClickListener(new OnClickListener() {  
  73. @Override  
  74. public void onClick(View v) {  
  75. // TODO Auto-generated method stub  
  76. // 这里可以执行相关操作  
  77. System.out.println("打开操作");  
  78. // 对话框消失  
  79. popupWindow.dismiss();  
  80. }  
  81. });  
  82. // 保存  
  83. save.setOnClickListener(new OnClickListener() {  
  84. @Override  
  85. public void onClick(View v) {  
  86. // TODO Auto-generated method stub  
  87. // 这里可以执行相关操作  
  88. System.out.println("保存操作");  
  89. popupWindow.dismiss();  
  90. }  
  91. });  
  92. // 关闭  
  93. close.setOnClickListener(new OnClickListener() {  
  94. @Override  
  95. public void onClick(View v) {  
  96. // TODO Auto-generated method stub  
  97. // 这里可以执行相关操作  
  98. System.out.println("关闭操作");  
  99. popupWindow.dismiss();  
  100. }  
  101. });  
  102.   
  103. }  
  104. /*** 
  105. * 获取PopupWindow实例 
  106. */  
  107. private void getPopupWindow() {  
  108.   
  109. if (null != popupWindow) {  
  110. popupWindow.dismiss();  
  111. return;  
  112. else {  
  113. initPopuptWindow();  
  114. }  
  115. }  
  116. }  

主要界面

2.main.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3. android:layout_width="fill_parent"  
  4. android:layout_height="fill_parent"  
  5. android:orientation="vertical" >  
  6. <Button android:id="@+id/popBtn"  
  7. android:layout_width="fill_parent"  
  8. android:layout_height="wrap_content"  
  9. android:text="@string/pop_left" />  
  10. </LinearLayout>  

弹出层的布局

3.pop.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3. android:orientation="vertical"  
  4. android:layout_width="fill_parent"  
  5. android:layout_height="fill_parent"  
  6. android:background="@android:color/darker_gray">  
  7. <Button android:id="@+id/open"  
  8. android:layout_width="fill_parent"  
  9. android:layout_height="wrap_content"  
  10. android:background="@drawable/btn"  
  11. android:text="@string/open"/>  
  12. <Button android:id="@+id/save"  
  13. android:layout_width="fill_parent"  
  14. android:layout_height="wrap_content"  
  15. android:background="@drawable/btn"  
  16. android:text="@string/save"/>  
  17. <Button android:id="@+id/close"  
  18. android:layout_width="fill_parent"  
  19. android:layout_height="wrap_content"  
  20. android:background="@drawable/btn"  
  21. android:text="@string/close"/>  
  22. </LinearLayout>  

value下的style文件

4.style

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3. <style name="AnimationFade">  
  4. <!--   PopupWindow左右弹出的效果-->  
  5. <item name="android:windowEnterAnimation">@anim/in_lefttoright</item>  
  6. <item name="android:windowExitAnimation">@anim/out_righttoleft</item>  
  7. </style>  
  8. </resources>  

value下的string文件

5.string.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3. <string name="hello">Hello World, PopwindowOnLeftActivity!</string>  
  4. <string name="app_name">PopwindowOnLeft</string>  
  5. <string name="pop_left">弹出左侧菜单</string>  
  6. <string name="open">打开</string>  
  7. <string name="save">保存</string>  
  8. <string name="close">关闭</string>  
  9. </resources>  

anim目录下的文件

出现时从左往右的动画文件

6.in_lefttoright.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3. <!-- 定义从左向右进入的动画 -->  
  4. <translate  
  5. android:fromXDelta="-100%"  
  6. android:toXDelta="0"  
  7. android:duration="500"/>  
  8. </set>  

退出时从右往左消失的动画

7.out_righttoleft.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3. <!-- 定义从右向左动画退出动画 -->  
  4. <translate  
  5. android:fromXDelta="0"  
  6. android:toXDelta="-100%"  
  7. android:duration="500"/>  
  8. </set>  
  • 大小: 17.4 KB
分享到:
评论

相关推荐

    android popwindow实现左侧弹出菜单层 .zip

    在这个"android popwindow实现左侧弹出菜单层 .zip"中,我们将重点探讨如何利用`PopupWindow`来创建一个从屏幕左侧滑出的菜单。 首先,`PopupWindow`的创建需要三个基本元素:一个视图(View)、宽度和高度。视图...

    android popwindow实现左侧弹出菜单层及PopupWindow主要方法介绍

    在这个场景中,我们讨论的是如何实现一个从左侧弹出的菜单层,并利用PopupWindow的主要方法。 首先,要创建一个PopupWindow,你需要自定义一个View,这通常是通过`LayoutInflater`来完成的。`LayoutInflater`可以从...

    Android popwindow和fragment结合 左侧弹出下拉菜单 切换界面

    在本项目中,我们将探讨如何将`PopWindow`与`Fragment`相结合,实现在按钮点击时从左侧弹出下拉菜单,并通过选择菜单项来切换界面。以下是关于`PopWindow`、`Fragment`以及它们结合使用的详细知识点。 1. **...

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

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

    android下popwindow的使用

    在Android开发中,PopupWindow是一个非常实用的组件,它能够以弹出窗口的形式展示内容,类似于iOS中的ActionSheet。在各种交互设计中,比如底部菜单、下拉选择、提示信息等,我们都能看到PopupWindow的身影。本文将...

    popwindow 控件右键菜单

    总之,`PopupWindow`是Android开发中实现各种弹出菜单和提示的利器,通过结合布局设计、事件处理和动画效果,我们可以创造出丰富的用户体验。对于右键菜单,关键在于正确配置`PopupWindow`的视图、位置以及动画,...

    Android-Android开发使用PupopWindow在指定View的上下左右动态显示菜单列表

    在Android开发中,PopupWindow是一种常用的轻量级组件,它可以在屏幕任意位置弹出一个窗口,通常用于实现快捷菜单、下拉列表等效果。在本示例中,我们将探讨如何利用PopupWindow模仿iOS中的底部弹窗列表,为用户提供...

    Android 中Popwindow弹出菜单的两种方法实例

    在Android开发中,`PopupWindow` 是一个非常实用的组件,它可以用来创建各种自定义的弹出式对话框。在本文中,我们将深入探讨 `PopupWindow` 的两种常见实现方法,以及它们的特点和使用场景。 首先,理解 `...

    android popWindow

    `PopupWindow`是Android系统提供的一个类,它可以创建一个可弹出的窗口,通常用于创建下拉菜单、提示信息或悬浮视图。与对话框不同,`PopupWindow`可以自由地定位在屏幕上的任何位置,并且可以根据需要设置背景透明...

    安卓SlidingMenu各种菜单侧滑菜单相关-级联菜单两级菜单自定义实现提供多种方式PopWindowFragment引用..rar

    在实现侧滑菜单时,PopWindow可以作为菜单项的弹出窗口,用户点击菜单项后,PopWindow会从菜单位置弹出,展示更多的操作选项。资源中包含的图片文件可能展示了PopWindow在实际应用中的样式和效果。 Fragment是...

    Android PopupWindow显示位置常用效果

    在Android开发中,PopupWindow是一个非常实用的组件,它能够以弹出窗口的形式展示内容,类似于iOS中的AlertController或者ActionSheet。本篇文章将深入探讨如何实现Android PopupWindow的各种常见显示位置效果,为你...

    Android popupwindow 示例程序一

    本示例程序"Android PopupWindow 示例程序一"着重展示了如何创建并控制PopupWindow使其弹出在指定控件的下方,提供了一个完整的实现过程,包括代码注释和内部控件的监听处理。 首先,了解PopupWindow的基本概念。...

    可从上往下拉的下拉抽屉式控件

    PopWindow是Android中的另一种UI组件,它可以弹出一个浮动窗口,类似于Toast但更加灵活,可以包含复杂的视图结构。PopWindow常用于创建临时提示或快速操作,结合下拉抽屉式控件,可以在用户触发特定操作时提供附加...

    popweindow案例

    在Android开发中,`PopupWindow`是一个非常实用的组件,常用于实现各种弹出窗口的效果,比如下拉菜单、提示信息等。在这个“popwindow案例”中,我们将深入探讨如何创建一个显示在屏幕右侧且背景半透明的`...

    PopupWindow

    PopupWindow是Android系统提供的一种轻量级的弹窗组件,它相比AlertDialog更加灵活,可以自定义显示的内容和样式,常用于实现二级菜单、下拉选择框等效果。本篇文章将深入探讨PopupWindow的使用方法、核心特性以及...

Global site tag (gtag.js) - Google Analytics