)android中的自訂popupwindow

來源:互聯網
上載者:User
/**

*

* @author Administrator

*

* 自訂Menu,而不用系統內建的Menu

*

* 系統Menu原理:當我們單擊Menu按鈕的時候,系統彈出一個PopupWindow

* 這個PopupWindow上面放置的就是菜單

*

* 為了讓我們單擊Menu按鈕的時候,彈出我們自己的定義的Menu,

* 只要捕獲keyDown事件即可,再keyDown事件裡,找到我們自己的Menu視窗,並將其顯示出來

*

* 而定義一個Menu視窗就是要用到PopupWindow了

*

* 然後再PopupWindow裡放入我們自訂的布局檔案,就一切如我們所願了

*

* 我們自己可以布局了,哈哈,是不是就可以加背景,換顏色,為所欲為了???

*

*/

public class MainActivity extends Activity {

private PopupWindow menuWindow;

private LinearLayout menuStart,menuPause,menuStop;

private LayoutInflater inflater; //這個是將xml中的布局顯示在螢幕上的關鍵類

private View layout;

private boolean menu_display = false;

//在onKeyDown中截獲系統Menu單擊事件

public boolean onKeyDown(int keyCode, KeyEvent event){

//就是如此簡單,呵呵

if(keyCode == KeyEvent.KEYCODE_MENU){

if(!menu_display){

//擷取LayoutInflater執行個體

inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);

//這裡的main布局是在inflate中加入的哦,以前都是直接this.setContentView()的吧?呵呵

//該方法返回的是一個View的對象,是布局中的根

layout = inflater.inflate(R.layout.menu, null);

//下面我們要考慮了,我怎樣將我的layout加入到PopupWindow中呢???很簡單

menuWindow = new PopupWindow(layout,LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); //後兩個參數是width和height

//menuWindow.showAsDropDown(layout); //設定彈出效果

menuWindow.showAtLocation(this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //設定layout在PopupWindow中顯示的位置

//如何擷取我們main中的控制項呢?也很簡單

menuStart = (LinearLayout)layout.findViewById(R.id.layout_start);

menuPause = (LinearLayout)layout.findViewById(R.id.layout_pause);

menuStop = (LinearLayout)layout.findViewById(R.id.layout_stop);

//下面對每一個Layout進行單擊事件的註冊吧。。。

//比如單擊某個MenuItem的時候,他的背景色改變

//事先準備好一些背景圖片或者顏色

menuStart.setOnClickListener(startListener);

menuPause.setOnClickListener(pauseListener);

menuStop.setOnClickListener(stopListener);

menu_display = true;

}else{

//如果當前已經為顯示狀態,則隱藏起來

menuWindow.dismiss();

menu_display = false;

}

return false;

}else if(keyCode == KeyEvent.KEYCODE_BACK){

//如果使用者按得是返回鍵,則不顯示菜單

if(menu_display){

//當前菜單顯示狀態,則隱藏

menuWindow.dismiss();

}else{

//結束當前

System.exit(0);

}

return false;

}else{

return false;

}

}

private View.OnClickListener startListener = new View.OnClickListener() {

public void onClick(View arg0) {

Toast.makeText(MainActivity.this, "start", Toast.LENGTH_LONG).show();

}

};

private View.OnClickListener pauseListener = new View.OnClickListener() {

public void onClick(View arg0) {

Toast.makeText(MainActivity.this, "pause", Toast.LENGTH_LONG).show();

}

};

private View.OnClickListener stopListener = new View.OnClickListener() {

public void onClick(View arg0) {

Toast.makeText(MainActivity.this, "stop", Toast.LENGTH_LONG).show();

}

};

   

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        this.requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉標題

        //注意:requestWindowFeature必須在setContentView之前

        setContentView(R.layout.main);

        //全屏設定

        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.