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