編輯:關於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。使用原理是差不多的。
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;
}
}
主要代碼就這樣差不多了。資源地址請點擊:下載資源。
emulator-arm.exe應用程序錯誤 0x00473983指令引用的0x0000ffff
唉,這個問題困擾很久了,可能原因呢也是有很多種的,就個人遇到的問題,在這裡給大家分享下:運eclipse的時候,就是不能運行出android avd(虛擬機
Android viewpager中動態添加view並實現偽無限循環的方法
本文實例講述了Android viewpager中動態添加view並實現偽無限循環的方法。分享給大家供大家參考,具體如下:viewpager的使用,大家都熟悉,它可以實現
android-合並兩張圖片bitmap
Bitmap bitmap1; Bitmap bitmap2; Bitmap bitmap3 = Bitmap.createBitmap(bitmap1.getWidth
Android (supports-sceeens)的用法,適應屏幕大小
我們都知道,Android 2.3(姜餅) SDK發布的時候,在SDK中增加了第三方add-ons,其中就包括了針對平板電腦的Galaxy Tab Addon。 當我