Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中popWindow彈出菜單的編寫

Android中popWindow彈出菜單的編寫

編輯:關於Android編程

1、什麼是popWindow?

popWindow就是對話框的一種方式!此文講解的android中對話框的一種使用方式,它叫popWindow。

2、popWindow的特性

Android的對話框有兩種:PopupWindow和AlertDialog。它們的不同點在於:
AlertDialog的位置固定,而PopupWindow的位置可以隨意。
AlertDialog是非阻塞線程的,而PopupWindow是阻塞線程的。
PopupWindow的位置按照有無偏移分,可以分為偏移和無偏移兩種;按照參照物的不同,可以分為相對於某個控件(Anchor錨)和相對於父控件。具體如下
showAsDropDown(View anchor):相對某個控件的位置(正左下方),無偏移
showAsDropDown(View anchor, int xoff, int yoff):相對某個控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相對於父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以設置偏移或無偏移

3、popWindow的設計

效果圖:

\

\

實現這個效果的,總共有兩個三個xml布局,一個是工具欄布局,一個是pZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcFdpbmRvd7K8vtajrNK7uPbKx7i4vefD5rK8vtahozwvcD4KPHA+uaS+38C4sry+1qO6PC9wPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:java;">
popWindow布局:




    

    

        

        

            

            

                

                
            

            

            

                

                
            

            
        

        
    

    


父界面布局:



    
    

    

    

對話框類,繼承OnClickListener,對點擊事件的相應:

package com.example.popwindow;

import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.PopupWindow;

public class MySimplePopMenu implements OnClickListener {
	private final PopupWindow popupWindow;
	private Activity mParent;

	public MySimplePopMenu(Activity mParent, int hight) {
		this.mParent = mParent;
		View menu = initMenuView(mParent);
		popupWindow = new PopupWindow(menu);
		popupWindow.setWidth(LayoutParams.MATCH_PARENT);
		popupWindow.setHeight(hight);
		popupWindow.setAnimationStyle(R.style.PopAnimation);
	}

	/**
	 * 設置具體Menu按鈕的監聽
	 * 
	 * @param mParent
	 * @return
	 */
	private View initMenuView(Activity mParent) {
		View menuView = mParent.getLayoutInflater().inflate(
				R.layout.my_simple_popupwindow_menu, null);
		menuView.findViewById(R.id.rlyt_menu).setOnClickListener(this);
		menuView.findViewById(R.id.rlyt_code).setOnClickListener(this);
		menuView.findViewById(R.id.rlyt_his).setOnClickListener(this);
		return menuView;
	}

	@Override
	public void onClick(View view) {
		switch (view.getId()) {
		// 點擊空白處
		case R.id.rlyt_menu:
			if (popupWindow != null && popupWindow.isShowing()) {
				popupWindow.dismiss();
			}
			break;

		// 掃一掃
		case R.id.rlyt_code:
			break;

		// 歷史記錄
		case R.id.rlyt_his:
			break;
		}
	}

	/**
	 * 返回View
	 * 
	 * @return
	 */
	public PopupWindow getMenu() {
		return popupWindow;
	}
}


這段代碼中的popupWindow.setAnimationStyle(R.style.PopAnimation);這行代碼需要特別注意,作用於對話框的彈出效果,如何使用可關注的我的博文:http://blog.csdn.net/stoppig/article/details/21481057。使用原理是差不多的。


主activity代碼:

package com.example.popwindow;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;

public class MainActivity extends Activity {

	private MySimplePopMenu popMenu;// 彈出選擇框
	private PopupWindow mPopupWindow; // 彈出框
	private ImageView app_iv_search;
	private boolean mIsFirst = true; // 是否第一次初始化彈出框
	private Context mContext;
	private RelativeLayout mLayout;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViews();
		initListener();
		this.mContext = this;
	}

	private void findViews() {
		app_iv_search = (ImageView) findViewById(R.id.app_iv_search);
		mLayout = (RelativeLayout) findViewById(R.id.rv_main);
	}

	private void initListener() {
		app_iv_search.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (mIsFirst) {
					mIsFirst = false;
					int height = mLayout.getHeight() - v.getHeight();
					popMenu = new MySimplePopMenu(MainActivity.this, height);
					mPopupWindow = popMenu.getMenu();
				}

				if (mPopupWindow == null) {
					return;
				}

				if (mPopupWindow.isShowing()) {
					mPopupWindow.dismiss();
					return;
				}

				mPopupWindow.showAtLocation(mLayout, Gravity.BOTTOM, 0, 0);
			}
		});
	}

	/**
	 * 獲取屏幕高度
	 * 
	 * @param context
	 * @return
	 */
	private int getScreenHeight(Context context) {
		WindowManager manager = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		Display display = manager.getDefaultDisplay();
		return display.getHeight();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

ps:這段代碼mIsFirst這個屬性是特別注意的,這個屬性控制著對話框彈出的次數,如果沒有進行控制,每點一次就會彈出一次。


主要代碼就這樣差不多了。資源地址請點擊:下載資源。



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved