關於AlertDialog.Builder犯的一個錯和自定義佈局的限制寬高一個知識點
阿新 • • 發佈:2019-01-30
先看錯誤程式碼
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);