`

android中使用PopupWindow实现弹出窗口菜单

阅读更多

结合上篇android中使用ViewPager实现图片拖动,我们实现了点击“帮助”按钮的功能,这一篇则是接着上一篇,让我们一起来完成“我的”按钮的功能,这一功能,则是使用PopupWindow来实现弹出菜单。

 

老习惯,先上效果图:


  图一

 



  图二

 

 

再上项目结构图,如图:

 

 


从项目结构图可见,我们这里并没有新建新的Activity,因为“我的”按钮和“帮助”是在一个页面的,所以,我们只需新建一个效果图中的,弹出菜单的布局文件即可,即popup_menu.xml,代码如下:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@drawable/popu_menu"
    android:paddingLeft="1dip"
    android:paddingRight="1dip"
    android:paddingTop="1dip"
    android:paddingBottom="14dip">
    <Button  
            android:id="@+id/btn_my_favorites"  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
            android:gravity="center"  
            android:text="我的喜爱"  
            android:layout_weight="1"  
            
            android:textSize="15sp"  
            android:textColor="@android:color/white"
            android:background="@drawable/button4"
            android:textStyle="bold" />  
        
        <View   
            android:layout_width="fill_parent"  
            android:layout_height="0.5dip"  
            android:background="#eee" />

        <Button
            android:id="@+id/btn_my_correction"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/button4"
            android:gravity="center"
           
            android:text="我的收藏"
            android:textColor="@android:color/white"
            android:textSize="15sp"
            android:textStyle="bold" />
  
          <View   
            android:layout_width="fill_parent"  
            android:layout_height="0.5dip"  
            android:background="#eee" />
           <Button  
            android:id="@+id/btn_my_evaluation"  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
            android:background="@drawable/button4"
            android:gravity="center"  
             
          
            android:layout_weight="1"  
            android:text="我的评价"  
            android:textSize="15sp"  
            android:textColor="@android:color/white"
            android:textStyle="bold" 
            android:focusable="true"/>  
 </LinearLayout>
 

 


上面标记为绿色的代码,即是我对弹出菜单的一些背景和按钮的修饰,否则原始的效果很难受。

@drawable/popu_menu,popu_menu是一张图片,也就是弹出菜单的一张棕色的背景图,这个我就不上传附件了,大家随意换一张就行。

@drawable/button4,button4则是一个修饰原生button的xml文件,放置在drawable-hdpi这个文件夹,跟图片一起,代码如下:(颜色大家就自己配置吧,也就是我这里的android:drawable="XXXX",我就偷下懒了....)

button4.xml:

 

<?xml version="1.0" encoding="utf-8" ?>  
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
<!-- 没有焦点时的背景颜色 -->  
<item android:state_window_focused="false"  android:drawable="@color/buttonBg"/>  
<!-- 非触摸模式下获得焦点并单击时的背景颜色 -->  
<item android:state_focused="true" android:state_pressed="true"  
android:drawable="@color/main_color" />  
<!--触摸模式下单击时的背景颜色  -->  
<item android:state_focused="false" android:state_pressed="true"  
android:drawable="@color/main2_color" /> 
<!--获得焦点时的背景  颜色-->  
<item android:state_focused="true" android:drawable="@color/main2_color" />  
</selector>  

 

 

 

最后,图片和布局都准备好了之后,就是在MainActivity.java中去编写代码了,具体流程则是先找到这个按钮,然后绑定事件,最后运行就可以了。代码如下:

Mainactivity.java:

 

package com.test.citylist;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupWindow;

public class MainActivity extends Activity implements OnClickListener{

	private Button btn_help,btn_menu;
	private PopupWindow popupMenu;
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //注册控件并绑定事件
        btn_help=(Button)findViewById(R.id.btn_help);//这个是上篇文章中的帮助按钮
        btn_menu=(Button)findViewById(R.id.btn_my_menu);//这个是本篇的菜单按钮
        btn_help.setOnClickListener(this);
        btn_menu.setOnClickListener(this);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.btn_help:
			Intent intent=new Intent();
			intent.setClass(MainActivity.this, HelpActivity.class);
			startActivity(intent);
			break;
		
		case R.id.btn_my_menu:
			initPopupMenu();//调用弹出菜单
			break;
		default:
			break;
		}
	}

	
	//点击我的菜单
	private void initPopupMenu(){
		if(popupMenu==null){
			 LayoutInflater lay = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
	         View v = lay.inflate(R.layout.popup_menu, null);    
	         //点击我的喜爱
	         ((Button)v.findViewById(R.id.btn_my_favorites)).setOnClickListener(new OnClickListener(){
				@Override
				public void onClick(View view) {
					popupMenu.dismiss();
					Intent intent=new Intent(MainActivity.this,MainActivity.class);
					startActivity(intent);
				}
			});
	         //点击我的收藏
	         ((Button)v.findViewById(R.id.btn_my_correction)).setOnClickListener(new OnClickListener(){
	 			@Override
	 			public void onClick(View view) {
	 				popupMenu.dismiss();
	 				Intent intent=new Intent(MainActivity.this,MainActivity.class);
					startActivity(intent);
	 			}
	 		});
	         //点击我的评价
	         ((Button)v.findViewById(R.id.btn_my_evaluation)).setOnClickListener(new OnClickListener(){
	 			@Override
	 			public void onClick(View view) {
	 				popupMenu.dismiss();
	 				Intent intent=new Intent(MainActivity.this,MainActivity.class);
					startActivity(intent);
	 			}
	 		});
	
	         popupMenu = new PopupWindow(v, getApplicationContext().getResources().getDisplayMetrics().widthPixels/3,
	        		                        getApplicationContext().getResources().getDisplayMetrics().heightPixels/4 , true);
		}
         //设置整个popupwindow的样式。    
         popupMenu.setBackgroundDrawable(new BitmapDrawable());    
         //使窗口里面的空间显示其相应的效果,比较点击button时背景颜色改变。    
         //如果为false点击相关的空间表面上没有反应,但事件是可以监听到的。    
         //listview的话就没有了作用。    
         popupMenu.setFocusable(true);    
         popupMenu.setOutsideTouchable(true);
         popupMenu.update();   

         popupMenu.showAsDropDown(btn_menu);
	}
}

 

到这里,运行代码,就可以看到效果图所示效果了,说做事要有始有终,既然我的这个页面上的两个按钮的功能已经分别实现了,那么最后一个“分享”按钮,我也不愿把它落下,那么点击“分享”后,是什么效果,用什么实现,请大家关注我的下一篇文章。

  • 大小: 53.5 KB
  • 大小: 49.9 KB
  • 大小: 41.6 KB
分享到:
评论
1 楼 youmu178 2013-03-28  
这个能给个源码吗?请问一下,点击tab 弹出popupwindow 怎么去知道弹出窗口在tab的位置下

相关推荐

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

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来实现各种形式的弹出窗口,如下拉菜单、提示框等。本教程将详细讲解如何使用`PopupWindow`来创建一个以`ListView`形式展示的菜单。首先,我们需要...

    Android源码——PopupWindow实现弹出菜单.zip

    - 背景模糊:如果希望弹出窗口有模糊背景效果,可以使用 `setBackgroundDrawable(Drawable drawable)` 设置一个模糊的Drawable。 总结,`PopupWindow` 是Android中实现弹出菜单或其它浮动视图的利器。通过理解其...

    安卓Android源码——Android之用PopupWindow实现弹出菜单.zip

    这个压缩包“安卓Android源码——Android之用PopupWindow实现弹出菜单.zip”显然是为了演示如何使用`PopupWindow`来构建弹出菜单。现在,我们将深入探讨`PopupWindow`的使用及其背后的原理。 `PopupWindow` 是 ...

    Android之用PopupWindow实现弹出菜单.rar

    在Android应用开发中,PopupWindow是一个非常实用的组件,它能帮助我们实现各种形式的弹出窗口,如下拉菜单、提示信息等。本教程将详细介绍如何使用PopupWindow来实现弹出菜单。 首先,理解PopupWindow的基本概念。...

    Android之用PopupWindow实现弹出菜单.zip

    在Android应用开发中,PopupWindow是一个非常实用的组件,它能帮助开发者实现各种形式的弹出窗口,如下拉菜单、浮动提示等。本资料"Android之用PopupWindow实现弹出菜单.zip"聚焦于如何利用PopupWindow来创建弹出...

    Android PopupWindow实现弹出菜单.zip

    在Android开发中,PopupWindow是一个非常实用的组件,它能够创建一种浮动的窗口效果,常用于实现各种弹出式菜单、提示信息等。本资料"Android PopupWindow实现弹出菜单.zip"应该包含了如何利用PopupWindow在Android...

    安卓开发-Android之用PopupWindow实现弹出菜单.zip

    这个压缩包"安卓开发-Android之用PopupWindow实现弹出菜单.zip"显然是为了帮助开发者理解如何在Android应用中使用PopupWindow来创建弹出菜单。以下将详细介绍PopupWindow及其在实现弹出菜单中的应用。 首先,...

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

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

    Android代码-之用PopupWindow实现弹出菜单.zip

    本资料包"Android代码-之用PopupWindow实现弹出菜单.zip"显然是为了演示如何在Android应用中使用PopupWindow来构建一个弹出菜单。 首先,我们来理解PopupWindow的基本概念。PopupWindow是Android SDK提供的一种轻量...

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

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

    使用PopupWindow实现页面点击顶部弹出下拉菜单

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来创建浮动窗口,通常用于实现类似下拉菜单、快捷选项等效果。本教程将详细解释如何使用`PopupWindow`来实现在页面顶部点击时弹出下拉菜单。 首先,...

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

    本资源"myandroidmenu_PopupWindow实现Android应用的弹出菜单.rar"提供了如何使用PopupWindow来创建自定义弹出菜单的实例。以下是对这个主题的详细讲解: 1. **PopupWindow简介** PopupWindow是Android SDK提供的...

    自定义PopupWindow实现底部弹出式菜单

    在Android开发中,`PopupWindow` 是一个非常实用的组件,它允许开发者创建浮动、可定制的窗口,常用于实现各种弹出式效果,如底部菜单、上下拉选择器等。本篇将深入探讨如何利用`PopupWindow`来实现一个自定义的底部...

    Android从屏幕底部弹出PopupWindow

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

    Android之用PopupWindow实现弹出菜单的方法详解

    在Android开发中,为了提供更加丰富和个性化的用户体验,开发者经常需要自定义弹出菜单,而PopupWindow就是实现这一目标的重要工具。PopupWindow允许我们创建一个浮动窗口,它可以灵活地展示各种视图,如列表、按钮...

    安卓Android源码——用PopupWindow实现弹出菜单.zip

    本项目"安卓Android源码——用PopupWindow实现弹出菜单.zip"显然是一个演示如何使用`PopupWindow`来构建弹出菜单的实例。下面我们将深入探讨`PopupWindow`的关键知识点。 首先,`PopupWindow` 是 Android SDK 提供...

    android利用PopupWindow实现工具栏弹出菜单

    PopupWindow是Android SDK提供的一种轻量级的窗口组件,它可以在Activity的任意位置弹出,并且可以自定义显示内容,非常适合用来实现类似下拉菜单的效果。 首先,了解PopupWindow的基本概念。PopupWindow是一个浮动...

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

    本文将详细介绍如何使用`PopupWindow`在Android应用中模仿微信右上角的弹出菜单效果。 首先,我们需要理解`PopupWindow`的基本用法。`PopupWindow` 是一个可以在屏幕任意位置显示的窗口,它不依附于任何Activity,...

    Android应用源码之用PopupWindow实现弹出菜单.zip

    1. `View contentView`:PopupWindow的内容视图,即弹出窗口显示的内容。 2. `int width`和`int height`:分别表示PopupWindow的宽度和高度,可以设置为WRAP_CONTENT或MATCH_PARENT。 3. `boolean isFocusable`:...

Global site tag (gtag.js) - Google Analytics