Android PopupWindow实现微信右上角的弹出菜单

日常开发过程中对于PopupWindown的使用也是比较多的。这里给大家展示一下PopupWindow的使用。

修改activity_main.xml布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="${relativePackage}.${activityClass}" > 

 <RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="50dip"
  android:background="@android:color/holo_blue_dark"> 

  <ImageView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_centerVertical="true"
   android:layout_marginLeft="10dip"
   android:background="@drawable/ic_launcher" /> 

  <ImageView
   android:id="@+id/rl_more"
   android:layout_width="wrap_content"
   android:layout_height="match_parent"
   android:background="@drawable/ability_show_item_bg"
   android:paddingLeft="15dp"
   android:paddingRight="5dp"
   android:layout_alignParentRight="true"
   android:src="@drawable/actionbar_more_icon" /> 

 </RelativeLayout> 

</RelativeLayout>

新建popup_window.xml布局文件

<?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:background="@android:color/white"
 android:gravity="center_horizontal"
 android:orientation="vertical" > 

 <TextView
  android:id="@+id/settings"
  android:layout_width="match_parent"
  android:layout_height="45dp"
  android:gravity="center"
  android:padding="12dp"
  android:text="设置"
  android:textSize="16sp" /> 

 <View
  android:layout_width="match_parent"
  android:layout_height="1dp"
  android:background="#BDBDBD" /> 

 <TextView
  android:id="@+id/about"
  android:layout_width="match_parent"
  android:layout_height="45dp"
  android:gravity="center"
  android:padding="12dp"
  android:text="关于"
  android:textSize="16sp" /> 

 <View
  android:layout_width="match_parent"
  android:layout_height="1dp"
  android:background="#BDBDBD" /> 

 <TextView
  android:id="@+id/ability_logout"
  android:layout_width="match_parent"
  android:layout_height="45dp"
  android:gravity="center"
  android:padding="12dp"
  android:text="退出"
  android:textSize="16sp" /> 

</LinearLayout>

自定义PopupWindow类PopWindow

package com.syz.mypopupwindow; 

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

/**
 * <p>Title:PopWindow</p>
 * <p>Description: 自定义PopupWindow</p>
 * @author syz
 * @date 2016-3-14
 */
public class PopWindow extends PopupWindow{
 private View conentView;
 public PopWindow(final Activity context){
  LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  conentView = inflater.inflate(R.layout.popup_window, null);
  int h = context.getWindowManager().getDefaultDisplay().getHeight();
  int w = context.getWindowManager().getDefaultDisplay().getWidth();
  // 设置SelectPicPopupWindow的View
  this.setContentView(conentView);
  // 设置SelectPicPopupWindow弹出窗体的宽
  this.setWidth(w / 2 + 40);
  // 设置SelectPicPopupWindow弹出窗体的高
  this.setHeight(LayoutParams.WRAP_CONTENT);
  // 设置SelectPicPopupWindow弹出窗体可点击
  this.setFocusable(true);
  this.setOutsideTouchable(true);
  // 刷新状态
  this.update();
  // 实例化一个ColorDrawable颜色为半透明
  ColorDrawable dw = new ColorDrawable(0000000000);
  // 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
  this.setBackgroundDrawable(dw);
  // mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
  // 设置SelectPicPopupWindow弹出窗体动画效果
  this.setAnimationStyle(R.style.AnimationPreview); 

  conentView.findViewById(R.id.about).setOnClickListener(new OnClickListener() { 

   @Override
   public void onClick(View arg0) {
    //do something you need here
    PopWindow.this.dismiss();
   }
  });
  conentView.findViewById(R.id.ability_logout).setOnClickListener(new OnClickListener() { 

   @Override
   public void onClick(View arg0) {
    // do something before signing out
    context.finish();
    PopWindow.this.dismiss();
   }
  });
  conentView.findViewById(R.id.settings).setOnClickListener(new OnClickListener() { 

   @Override
   public void onClick(View arg0) {
    // do something you need here 

    PopWindow.this.dismiss();
   }
  });
 } 

 /**
  * 显示popupWindow
  *
  * @param parent
  */
 public void showPopupWindow(View parent) {
  if (!this.isShowing()) {
   // 以下拉方式显示popupwindow
   this.showAsDropDown(parent, parent.getLayoutParams().width / 2, 5);
  } else {
   this.dismiss();
  }
 }
}

添加自定义PopupWindow所需的style

AnimationPreview

<style name="AnimationPreview">
  <item name="android:windowEnterAnimation">@anim/fade_in</item>
  <item name="android:windowExitAnimation">@anim/fade_out</item>
 </style>

添加style所需的动画

fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 左上角扩大-->
 <scale xmlns:android="http://schemas.android.com/apk/res/android"
  android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  android:fromXScale="0.001"
  android:toXScale="1.0"
  android:fromYScale="0.001"
  android:toYScale="1.0"
  android:pivotX="100%"
  android:pivotY="10%"
  android:duration="200" />

fade_out.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 左上角缩小 -->
 <scale xmlns:android="http://schemas.android.com/apk/res/android"
  android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  android:fromXScale="1.0"
  android:toXScale="0.001"
  android:fromYScale="1.0"
  android:toYScale="0.001"
  android:pivotX="100%"
  android:pivotY="10%"
  android:duration="200" />

最后在MainActivity类中使用

package com.syz.mypopupwindow; 

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener; 

public class MainActivity extends Activity implements OnClickListener { 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 findViewById(R.id.rl_more).setOnClickListener(this);
 } 

 @Override
 public void onClick(View v) {
 if(v.getId() == R.id.rl_more){
  PopWindow popWindow = new PopWindow(this);
  popWindow.showPopupWindow(findViewById(R.id.rl_more));
 }
 }
}

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Android自定义PopWindow实现QQ、微信弹出菜单效果
  • Android仿微信长按菜单效果
  • Android仿微信底部菜单栏效果
  • Android制作微信app顶部menu菜单(ActionBar)
  • Android中微信小程序开发之弹出菜单
  • android自定义popupwindow仿微信右上角弹出菜单效果
  • Android开发Popwindow仿微信右上角下拉菜单实例代码
  • Android开发之微信底部菜单栏实现的几种方法汇总
  • Android仿微信底部菜单栏功能显示未读消息数量
  • Android仿微信滑动弹出编辑、删除菜单效果、增加下拉刷新功能
  • Android仿微信加号菜单模式
(0)

相关推荐

  • Android开发Popwindow仿微信右上角下拉菜单实例代码

    先给大家看下效果图: MenuPopwindow: package com.cloudeye.android.cloudeye.view; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; import android.view.View; import an

  • Android开发之微信底部菜单栏实现的几种方法汇总

     实现方式 实现的方式有很多种 这里总结最常见的几种方式,以后再添加其他的. viewPager + RadioGroup viewPager + FragmentTabHost viewpager +TabLayout viewPager+RadioGroup 感觉这是最简单的一个了,我也就不贴代码 说说我理解的思路吧 通过给pager 和RadioGroup 添加监听,监听两个控件的变化 实现联动 当viewPager的显示pager改变就会触发监听 ,在监听中选中对应的RadioButto

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

    微信右上角的操作菜单看起来很好用,就照着仿了一下,不过是旧版微信的,手里刚好有一些旧版微信的资源图标,给大家分享一下. 不知道微信是用什么实现的,我使用popupwindow来实现,主要分为几块内容: 1.窗口布局文件:popwin_share.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com

  • Android仿微信滑动弹出编辑、删除菜单效果、增加下拉刷新功能

    如何为不同的list item呈现不同的菜单,本文实例就为大家介绍了Android仿微信或QQ滑动弹出编辑.删除菜单效果.增加下拉刷新等功能的实现,分享给大家供大家参考,具体内容如下 效果图: 1. 下载开源项目,并将其中的liberary导入到自己的项目中: 2. 使用SwipeMenuListView代替ListView,在页面中布局: <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipeRefresh

  • Android制作微信app顶部menu菜单(ActionBar)

    使用微信APP的小伙伴对于微信的ActionBar一定有印象,今天就带领大家一起实现以下这个效果. 第一步打开我们的开发工具,这里我使用的是Eclipse+ADT插件,然后创建我们的工程,这里选择Android的最低版本号为3.0或以上. 然后开始我们的"抄袭",首先打开我们微信,我们看到,顶部标题部分,分为左右两部分,左侧为"微信"两字,右侧则为搜索按钮+更多按钮,点击搜索按钮,会出现一个文本输入框.点击更多按钮,则会出现隐藏的menu菜单,分为:添加好友.发起群

  • Android仿微信长按菜单效果

    本文实例为大家分享了Android仿微信长按菜单展示的具体代码,供大家参考,具体内容如下 FloatMenu A menu style pop-up window that mimics WeChat.仿微信的长按菜单. 效果如下 引入方法: Github地址:https://github.com/JavaNoober/FloatMenu dependencies { .... compile 'com.noober.floatmenu:common:1.0.2' } 使用说明 使用方法1: A

  • Android中微信小程序开发之弹出菜单

    先给大家展示下效果图,具体效果图如下所示: 具体代码如下所示: 1.index.js //index.js //获取应用实例 var app = getApp() Page({ data: { isPopping: false,//是否已经弹出 animationPlus: {},//旋转动画 animationcollect: {},//item位移,透明度 animationTranspond: {},//item位移,透明度 animationInput: {},//item位移,透明度

  • Android仿微信加号菜单模式

    在模仿微信过程中有一个加号菜单启动着实让我有点费心,因为我去掉了自带的标题栏,想通过OnCreateOptionMenu这段代码来实现传统的Menu显示显然是不可能了.所以在自定义创建的状态栏里添加了一个加号的ImageView,想通过监听ImageView的Onclick来触发Popumenu的创建.基本效果与微信相似,细节方面还需多多考究. 看具体代码如下: 1.监听之后创建Popumenu的java代码: menuView.setOnClickListener(new View.OnCli

  • Android仿微信底部菜单栏效果

    前言 在市面上,大多数的APP都需要通过底部菜单栏来将程序的功能进行分类整理,通常都是分为3-5个大模块,从而正确有效地引导用户去使用我们的APP.实现底部菜单栏的方法也有很多种. 1.仿微信底部菜单栏(ViewPager+ImagerView+TextView) ......(其他方式后续会补充) 效果预览 首先来个开胃菜,看看实现效果: 先贴出项目所需的资源文件,这些可随个人自由更改颜色和文字 colors.xml <color name="bg_line_light_gray&quo

  • Android仿微信底部菜单栏功能显示未读消息数量

    底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏,这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写的太臃肿,这里去掉了很多不必要的层,个人看起来还是不错的,所以贴出来方便以后使用). 先看一下做出来之后的效果: 以后使用的时候就可以换成自己项目的图片和字体了,主框架不用变哈哈, 首先是要布局layout下xml文件 main.xml: <?xml version="1.0" encoding=&qu

  • Android自定义PopWindow实现QQ、微信弹出菜单效果

    前段时间在个人开发的项目中需要用到弹出菜单,类似QQ右上角的弹出菜单,自己使用popwin的次数也不是很多,其中也遇到过一点问题,今天正好有时间就把一些经验分享给大家. 先来看看最终实现过后的效果怎么样,下面放上图 自定义的弹出菜单是继承的popwin,并不是view 因为没有必要重复造车轮,如果想要实现某种特殊的效果另说.首先创建类MyPopWindow继承Popwindow. public class MyPopWindow extends PopupWindow implements Vi

随机推荐