您的位置:首页 > 移动开发 > 微信开发

Android之PopupWindow类似微信右上角的弹出菜单

2017-11-08 18:34 615 查看
http://blog.csdn.net/loveyaozu/article/details/51150229

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

修改activity_main.xml布局:

[html]
view plain
copy

<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布局文件

[html]
view plain
copy

<?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

[java]
view plain
copy

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

[html]
view plain
copy

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

添加style所需的动画
fade_in.xml

[html]
view plain
copy

<?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

[html]
view plain
copy

<?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类中使用

[java]
view plain
copy

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));  
        }  
    }  
}  

效果图:

  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: