Android仿微信头部下拉菜单

本文介绍如何在Android中创建一个仿微信头部的下拉菜单。通过自定义BasePopupWindow类并继承PopupWindow,重写相关方法。下拉菜单的布局文件为popup_window_menu.xml,同时提供获取手机状态栏高度的方法。

1、新建一个类BasePopupWindow,继承PopupWindow,重写其几个方法

public abstract class BasePopupWindow extends PopupWindow {

	protected View mContentView;
        public BasePopupWindow(){
               super();
        }
       
        public BasePopupWindow(Context context, AttributeSet attrs, int defStyle){
              super(context, attrs, defStyle);
        }
       
       public BasePopupWindow(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public BasePopupWindow(Context context) {
		super(context);
	}

	public BasePopupWindow(int width, int height) {
		super(width, height);
	}

	public BasePopupWindow(View contentView, int width, int height,
			boolean focusable) {
		super(contentView, width, height, focusable);
	}

	public BasePopupWindow(View contentView) {
		super(contentView);
	}

       public BasePopupWindow(View contentView, int width, int height){
             super(contentView, width, height, true);
             mContentView = contentView;
             setFocusable(true);
             setOutsideTouchable(true);
        //  setAnimationStyle(R.style.Popup_Animation_Alpha);
             setBackgroundDrawable(new ColorDrawable());
             setTouchable(true);
       
             initViews();
             initEvents();
     }

     public abstract void initViews();

     public abstract void initEvents();

     public View findViewById(int id) {
		return mContentView.findViewById(id);
	}
}

2、再创建一个类继承BasePopupWindow,把你所需求的下拉菜单布局xml定义好后,设置在该类里,并把可控件初始化、设置监听事件等。

  下拉菜单布局 popup_windown_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:background="@drawable/main_navigation_background"
    android:orientation="vertical"
    android:baselineAligned="false"
    android:padding="15dp" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/menu1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:drawableLeft="@drawable/android_my_jd_collects"
            android:drawablePadding="5dp"
            android:gravity="center"
            android:text="我的收藏"
            android:textColor="#ffffff" />
    </LinearLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="2dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:background="#2f4f4f" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="horizontal" >

        <Button
        android:id="@+id/menu2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:drawableLeft="@drawable/android_my_jd_orders"
            android:drawablePadding="5dp"
            android:gravity="center"
            android:text="我的订单"
            android:textColor="#ffffff" />
    </LinearLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="2dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:background="#2f4f4f" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="horizontal" >

        <Button
        android:id="@+id/menu3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:drawableLeft="@drawable/android_my_jd_account_safe"
            android:drawablePadding="5dp"
            android:gravity="center"
            android:text="修改密码"
            android:textColor="#ffffff" />
    </LinearLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="2dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:background="#2f4f4f" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/menu4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:drawableLeft="@drawable/android_my_jd_messages"
            android:drawablePadding="5dp"
            android:gravity="center"
            android:text="我的资料"
            android:textColor="#ffffff" />

    </LinearLayout>

</LinearLayout>

MyMenuPopupWindow类:

public class MyMenuPopupWindow extends BasePopupWindow implements
		OnClickListener {
	/** popupmenu 中的各个item */
	private Button menu1;
	private Button menu2;
	private Button menu3;
	private Button menu4;

	private onPopupMenuItemClickListener mOnPopupMenuItemClickListener;

	/**
	 * 设置自定义的popupmenu布局
	 */
	public MyMenuPopupWindow(Context context, int width, int height) {
		super(LayoutInflater.from(context).inflate(R.layout.popup_windown_menu,
				null), width, height);
	}

	@Override
	public void initViews() {
		menu1 = (Button) findViewById(R.id.menu1);
		menu2 = (Button) findViewById(R.id.menu2);
		menu3 = (Button) findViewById(R.id.menu3);
		menu4 = (Button) findViewById(R.id.menu4);
	}

	@Override
	public void initEvents() {
		menu1.setOnClickListener(this);
		menu2.setOnClickListener(this);
		menu3.setOnClickListener(this);
		menu4.setOnClickListener(this);
	}

	@Override
	public void init() {

	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.menu1:
			if (mOnPopupMenuItemClickListener != null) {
				mOnPopupMenuItemClickListener.onMyFavoritesButtunClick();
			}
			break;
		case R.id.menu2:
			if (mOnPopupMenuItemClickListener != null) {
				mOnPopupMenuItemClickListener.onMyOrderButtunClick();
			}
			break;
		case R.id.menu3:
			if (mOnPopupMenuItemClickListener != null) {
				mOnPopupMenuItemClickListener.onMyresetPasswdButtunClick();
			}
			break;
		case R.id.menu4:
			if (mOnPopupMenuItemClickListener != null) {
				mOnPopupMenuItemClickListener.onMyInfosButtunClick();
			}
			break;
		}
		dismiss();
	}

	public void setOnPopupMenuItemClickListener(
			onPopupMenuItemClickListener listener) {
		mOnPopupMenuItemClickListener = listener;
	}

	public interface onPopupMenuItemClickListener {
		void onMyFavoritesButtunClick();

		void onMyOrderButtunClick();

		void onMyresetPasswdButtunClick();

		void onMyInfosButtunClick();
	}

}



3、在需要设置下拉菜单的界面把MyMenuPopupWindow

    getStatusBarHeight 是获取手机状态栏高度


<pre name="code" class="html">public class PopupActivity extends Activity implements onPopupMenuItemClickListener {
        private MyMenuPopupWindow mPopupMenu  = null;
	private RelativeLayout top_layout = null;
        private Button more_button;

        @Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
                more_button = (Button) findViewById(R.id.more_button);
		
		mPopupMenu = new MyMenuPopupWindow(this, 280, LayoutParams.WRAP_CONTENT);
		top_layout = (RelativeLayout) findViewById(R.id.top_layout);
		mPopupMenu.setOnPopupMenuItemClickListener(this);


                more_button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				int height = top_layout.getHeight() + CommonTools.getStatusBarHeight( PopupActivity.this);
				int width = top_layout.getWidth();
				mPopupMenu.showAtLocation(top_layout, Gravity.TOP, width, height);//把Menu设置在top_layout高度开始处,右边开始处
			}
		});
		
	}
     

        //-------自定义的菜单对应的按钮事件------------------------------------
	@Override
	public void onMyFavoritesButtunClick() {
		startActivity(new Intent(this, SplashActivity.class));
	}

	@Override
	public void onMyOrderButtunClick() {
		Toast.makeText(getApplicationContext(), "我的订单", Toast.LENGTH_SHORT).show();
	}

	@Override
	public void onMyresetPasswdButtunClick() {
		Toast.makeText(getApplicationContext(), "修改密码", Toast.LENGTH_SHORT).show();
	}

	@Override
	public void onMyInfosButtunClick() {
		Toast.makeText(getApplicationContext(), "我的资料", Toast.LENGTH_SHORT).show();
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值