在安卓開發中,時常遇到要彈窗提醒的情況。而系統內建的彈出對話方塊由不是很美觀,可以通過自己繼承對話方塊類(Dialog),並設定自訂的布局檔案,來達到美化彈出式對話方塊的目的。
首先是自訂一個對話方塊類,繼承自Dialog,然後再建構函式中傳入對話方塊顯示內容、按鈕響應函數等參數:
| 代碼如下 |
複製代碼 |
public UserDefinedDialog(Context context, String message, View.OnClickListener onclicklistener, View.OnClickListener cancelListener) { super(context,R.style.Theme_Dialog); this.ctx = context; this.msg = message; if (onclicklistener != null) { this.okListener=onclicklistener; } if(cancelListener != null) { IsTwoButton=true; this.cancelListener=cancelListener; } } |
然後,在自訂對話方塊類的OnCreate函數中,設定對話方塊的布局,以及顯示風格:
| 代碼如下 |
複製代碼 |
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.alertdialog); tvtitle = (TextView) findViewById(R.id.dialogtitle); tvcontent = (TextView) findViewById(R.id.dialogcontent); btnleft = (Button) findViewById(R.id.btnleft); btnright = (Button) findViewById(R.id.btnright); btnleft.setOnClickListener(this); btnright.setOnClickListener(this); btncenter = (Button) findViewById(R.id.btncenter); btncenter.setOnClickListener(this); if(IsTwoButton) { btnleft.setVisibility(View.VISIBLE); btnright.setVisibility(View.VISIBLE); btncenter.setVisibility(View.GONE); } tvtitle.setText("提示"); tvcontent.setText(msg); WindowManager m; m = (WindowManager)ctx.getSystemService(Context.WINDOW_SERVICE); Display d = m.getDefaultDisplay(); LayoutParams p = getWindow().getAttributes(); //設定對話方塊寬高 p.height = (int) (d.getHeight() * 0.3); p.width = (int) (d.getWidth() * 0.9); //設定對話方塊透明度 p.alpha = 0.8f; //讓背景變黑 p.dimAmount = 0.7f; getWindow().setAttributes(p); getWindow().setGravity(Gravity.CENTER); } |
另外,自訂的對話方塊類UserDefinedDialog同時實現了OnClickListener介面,用於實現對點擊對話方塊上按鈕的響應,在響應函數中,會判斷在構造該類的時候是否傳入了相應的響應函數,並交由該函數處理:
| 代碼如下 |
複製代碼 |
public void onClick(View v) { switch (v.getId()) { case R.id.btnleft: if(cancelListener != null){ cancelListener.onClick(v); } break; case R.id.btncenter: if(okListener != null){ okListener.onClick(v); } break; case R.id.btnright: if(okListener != null){ okListener.onClick(v); } break; } this.cancel(); } |
最後,調用的時候非常簡單:
| 代碼如下 |
複製代碼 |
new UserDefinedDialog(this, "我是一個按鈕的對話方塊,預設效果取消", null, null).show(); new UserDefinedDialog(this, "我是兩個按鈕的對話方塊", new OnClickListener() { public void onClick(View v) { //dosomething } }, new OnClickListener() { public void onClick(View v) { //dosomething} }).show(); |
美化之後的對話方塊如下圖所示: