1. 程式人生 > >關於AlertDialog.Builder犯的一個錯和自定義佈局的限制寬高一個知識點

關於AlertDialog.Builder犯的一個錯和自定義佈局的限制寬高一個知識點

先看錯誤程式碼

 AlertDialog.Builder builder=new AlertDialog.Builder(getApplicationContext());
        builder.setTitle("溫馨提示")
                .setMessage("確定要離開嗎?")
                .setPositiveButton("確定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, "哈哈", Toast.LENGTH_SHORT).show();
            }
        }).setNegativeButton("去消", null);
        builder.show();

乍一看,沒錯誤啊,,,,可是執行起來會崩掉,,.  後來一行一行改程式碼除錯了一下,發現了錯誤在這裡

AlertDialog.Builder builder=new AlertDialog.Builder(this);//改為this  或者MainActivity.this 都是可以的

錯誤的原因: AlertDialog物件是依賴一個View的 而這個View的生命週期是和當前頁面的Activity的生命週期保持一致的 ,,,如果傳入的是getApplicationContext().則是和整個應用的生命週期保持一致,所以執行起來就會崩掉

//關於自定義佈局的限制寬高

setView和setContentView裡面可以放入自定義佈局,,,但是後來發現無論如何,寬高都會不變

後來發現需要改變所依賴的視窗引數

Window window = dialog.getWindow();
WindowManager.LayoutParams attributes = window.getAttributes();
attributes.width=dip2px(200);
attributes.height=dip2px(200);