編輯:關於Android編程
Android有三類窗口
應用程序窗口 (Application Window): 包括所有應用程序自己創建的窗口,以及在應用起來之前系統負責顯示的窗口。
子窗口(Sub Window):比如應用自定義的對話框,或者輸入法窗口,子窗口必須依附於某個應用窗口(設置相同的token)。
系 統窗口(System Window): 系統設計的,不依附於任何應用的窗口,比如說,狀態欄(Status Bar), 導航欄(Navigation Bar), 壁紙(Wallpaper), 來電顯示窗口(Phone),鎖屏窗口(KeyGuard), 信息提示窗口(Toast), 音量調整窗口,鼠標光標等等。
popupwindow是屬於 sub window的,所以一定要有一個view去依附
主要有兩個方法
showAtLocation(View parent,
int gravity, int x, int y)
顯示popupwindow在特殊的位置
showAsDropDown(View anchor,
int xoff, int yoff)
顯示在view anchor左下x偏移以及y偏移的位置
public void on_effect(final View v){ /* data.src_bmp=myview.bmp; Intent intent=new Intent(drowview.this,bmpeffect.class); startActivity(intent); */ //前面那個線性布局消失 Log.e("on_effect", "ing"); pop_num=0; //relayout2.setVisibility(View.GONE); //relayout.setVisibility(View.VISIBLE); show=true; int[] location = new int[2]; v.getLocationOnScreen(location); Log.e(""+location[0], ""+location[1]); mypopwindow.showAtLocation(v, Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0,0); }
public void on_show(final View v){ //showpop=(LinearLayout) findViewById(R.id.linearLayoutpop1); //Log.e("show", "ing"); if(pop_show_flag==false){ showpop.setVisibility(View.VISIBLE); leftpop.invalidate(); windowManager.removeViewImmediate(leftpop); //leftpop.setOnTouchListener(l) leftpop=getLayoutInflater().inflate(R.layout.leftpopwindow2, null); leftpop.setOnTouchListener(mylistener); windowManager.addView(leftpop, windowManagerParams); windowManager.updateViewLayout(leftpop,windowManagerParams); pop_show_flag=true; Log.e("show", "flase"); } else{ windowManager.removeViewImmediate(leftpop); leftpop=getLayoutInflater().inflate(R.layout.leftpopwindow,null); leftpop.setOnTouchListener(mylistener); windowManager.addView(leftpop, windowManagerParams); windowManager.updateViewLayout(leftpop,windowManagerParams); pop_show_flag=false; Log.e("show", "true"); } }
windowManager=this.getWindowManager(); windowManagerParams=new WindowManager.LayoutParams(); windowManagerParams.format = PixelFormat.RGBA_8888;; windowManagerParams.type = android.view.WindowManager.LayoutParams.TYPE_APPLICATION; windowManagerParams.flags=android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |android.view.WindowManager.LayoutParams.FLAG_SPLIT_TOUCH; //|android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; // windowManagerParams.flags=android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; windowManagerParams.gravity=Gravity.LEFT|Gravity.CENTER_VERTICAL;
type可以試系統窗口中的TYPE_PHONE,或者其他的,窗口值越大,現在越在上面,
flag表示視圖的參數,表示是否可以觸摸,可以聚焦等。
grvavity表示view的位置等。
leftpop.setOnTouchListener(mylistener);在這個裡面設置ontouch監聽器,可以手動調用下面的onTouch
mylistener=new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub Log.e("top", "ing"); // v. my_drow_view.onTouchEvent(event);//這裡調用下面的onTouch return true; } };
popupwindow點擊view以外的地方消失
popupWindow.setFocusable(true);
這樣,顯示的時候,popupWindow獲取啦焦點,後面的內容為非活動。
但是這樣不能實現點擊屏幕其他部分使其消失,返回鍵也不行。
這時候要給popupWindow設置一個一個BackgroundDrawable,如果你已經定義好布局,怕破壞掉樣式,只需要設置一個空的Drawable即可。
popupWindow.setBackgroundDrawable(new PaintDrawable());
一、建立測試環境 安裝了Android Developer Tools (ADT) 插件的Eclipse將為你創建,構建,以及運行Android程序提供一個基於圖形界面的
之前做過一次但是隔了一個月再做就有點忘了,果然好記性不如爛筆頭!還是打算記一下。現在網絡上的一些有關這方面的文章都比較久遠了雖然方法沒錯但是之前的網址都變了所以需要進行一
歡迎大家來學習本節內容,前幾節我們已經學習了其他幾種自定義控件,分別是Andriod 自定義控件之音頻條及 Andriod 自定義控件之創建可以復用的組合控件還沒有學習的
第一步:下載SDK:1下載地址:http://www.mob.com/ 根據需求選擇需要的平台:第二步:申請ShareSDK的AppKey把鼠標移到頭像上,點擊進入後台: