系統默認的AlertDialog,與項目的UI不統一,因此,改了一下,定義了同樣式,最終效果以下圖:
另外,爲了儘可能少改原來的代碼,該類類名及相關方法名都與android.app.AlertDialog相同,使用時,原代碼只須要修改導入的包名,在按鈕的Listener上加上一句關閉對話框的方法便可.
先是對話框的XML佈局文件:
test.xmljava
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- 頂部橢園邊緣 --> <ImageView android:layout_width="400dp" android:layout_height="22dp" android:src="@drawable/dialog_top" > </ImageView> <!-- 中間白色背景,兩個TextView,標題和內容,留一個LinearLayout,在代碼中根據調用動態加上按鈕 --> <LinearLayout android:layout_width="400dp" android:layout_height="wrap_content" android:background="@drawable/dialog_center" android:orientation="vertical" > <TextView android:textColor="#000000" android:textSize="35dp" android:gravity="center" android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:layout_marginLeft="20dp" android:layout_marginRight="10dp" android:id="@+id/message" android:layout_marginBottom="10dp" android:layout_marginTop="20dp" android:textColor="#000000" android:textSize="25dp" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <!-- 在LinearLayout中加按鈕 --> <LinearLayout android:id="@+id/buttonLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" android:gravity="center" android:orientation="horizontal" > </LinearLayout> </LinearLayout> <!-- 底部橢園邊緣 --> <ImageView android:layout_marginTop="-2dp" android:layout_width="400dp" android:layout_height="22dp" android:src="@drawable/dialog_bottom" > </ImageView> </LinearLayout>
按鈕背景,不一樣狀態不一樣,可參考本博相關文章:
alertdialog_button.xmlandroid
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" android:drawable="@drawable/dialog_button_pressed" /> <item android:state_focused="true" android:drawable="@drawable/dialog_button_pressed" /> <item android:drawable="@drawable/dialog_button" /></selector>
下面就是自定義的AlertDialog類的代碼:web
public class AlertDialog { Context context; android.app.AlertDialog ad; TextView titleView; TextView messageView; LinearLayout buttonLayout; public AlertDialog(Context context) { // TODO Auto-generated constructor stub this.context=context; ad=new android.app.AlertDialog.Builder(context).create(); ad.show(); //關鍵在下面的兩行,使用window.setContentView,替換整個對話框窗口的佈局 Window window = ad.getWindow(); window.setContentView(R.layout.alertdialog); titleView=(TextView)window.findViewById(R.id.title); messageView=(TextView)window.findViewById(R.id.message); buttonLayout=(LinearLayout)window.findViewById(R.id.buttonLayout); } public void setTitle(int resId) { titleView.setText(resId); } public void setTitle(String title) { titleView.setText(title); } public void setMessage(int resId) { messageView.setText(resId); } public void setMessage(String message) { messageView.setText(message); } /** * 設置按鈕 * @param text * @param listener */ public void setPositiveButton(String text,final View.OnClickListener listener) { Button button=new Button(context); LinearLayout.LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); button.setLayoutParams(params); button.setBackgroundResource(R.drawable.alertdialog_button); button.setText(text); button.setTextColor(Color.WHITE); button.setTextSize(20); button.setOnClickListener(listener); buttonLayout.addView(button); } /** * 設置按鈕 * @param text * @param listener */ public void setNegativeButton(String text,final View.OnClickListener listener) { Button button=new Button(context); LinearLayout.LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); button.setLayoutParams(params); button.setBackgroundResource(R.drawable.alertdialog_button); button.setText(text); button.setTextColor(Color.WHITE); button.setTextSize(20); button.setOnClickListener(listener); if(buttonLayout.getChildCount()>0) { params.setMargins(20, 0, 0, 0); button.setLayoutParams(params); buttonLayout.addView(button, 1); }else{ button.setLayoutParams(params); buttonLayout.addView(button); } } /** * 關閉對話框 */ public void dismiss() { ad.dismiss(); } }
使用方法:app
final AlertDialog ad=new AlertDialog(Test.this); ad.setTitle("標題"); ad.setMessage("內容sdfsafdasf內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容"); ad.setPositiveButton("肯定", new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub ad.dismiss(); Toast.makeText(Test.this, "被點到肯定", Toast.LENGTH_LONG).show(); } }); ad.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub ad.dismiss(); Toast.makeText(Test.this, "被點到取消", Toast.LENGTH_LONG).show(); } });