Android学习之自定义AlertDialog

今天写下自定义弹出对话框AlertDialog,自定义AlertDialog有很多种,也有很多实现的方式,系统自带的AlertDialog往往功能单一,主要是样式比较丑,对于处女座简直是不能忍啊,于是就想到了自定义样式的AlertDialog,以下是Demo:

先画布局:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/linearlayout_alert_dialog_text_view_custom"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:background="@android:color/white"  android:orientation="vertical">   <TextView  android:id="@+id/textview_message_alert_dialog_text_view_custom"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:gravity="center_horizontal|bottom"  android:paddingBottom="15dp"  android:paddingTop="15dp"  android:textColor="@android:color/black"  android:textSize="15dp"  android:textStyle="bold" />   <LinearLayout  android:layout_width="match_parent"  android:layout_height="match_parent"  android:layout_marginBottom="15dp"  android:gravity="center_horizontal"  android:orientation="horizontal">   <Button  android:id="@+id/button_cancel_alert_dialog_text_view_custom"  android:layout_width="match_parent"  android:layout_height="40dp"  android:layout_marginLeft="15dp"  android:layout_marginRight="15dp"  android:layout_weight="1"  android:background="@drawable/bg_alert_dialog_custom"  android:text="取消"  android:textColor="@android:color/holo_blue_light"  android:textSize="14dp"  android:textStyle="bold" />   <Button  android:id="@+id/button_ok_alert_dialog_text_view_custom"  android:layout_width="match_parent"  android:layout_height="40dp"  android:layout_marginLeft="15dp"  android:layout_marginRight="15dp"  android:layout_weight="1"  android:background="@drawable/bg_alert_dialog_custom"  android:text="确定"  android:textColor="@android:color/holo_red_light"  android:textSize="14dp"  android:textStyle="bold" />  </LinearLayout>  </LinearLayout>
自定义Button的样式:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"  android:shape="rectangle">   <corners android:radius="3dp" />  <stroke  android:width="1px"  android:color="#FF999999" />  <solid android:color="@android:color/white" />  </shape>
最后是代码:

/**  * 主界面  *  * @author yuzhentao  */ public class MainActivity extends Activity {

    private Context context;   private AlertDialog ad;  private Window window;   @Override  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  initView();  }

    private void initView() {
        context = this;  ad = new AlertDialog.Builder(context).create();  window = ad.getWindow();  findViewById(R.id.button_activity_main).setOnClickListener(new View.OnClickListener() {
            @Override  public void onClick(View v) {
                initAlertDialog();  }
        });  }

    /**  * 初始化AlertDialog  */  private void initAlertDialog() {
        //获取屏幕分辨率宽度和高度  DisplayMetrics dm = new DisplayMetrics();  getWindowManager().getDefaultDisplay().getMetrics(dm);  int screenWidth = dm.widthPixels;  //初始化AlertDialog  ad.setCancelable(false);  ad.setCanceledOnTouchOutside(false);  ad.show();  //获取Window来设置AlertDialog的布局(宽为屏幕宽度乘以0.95,高为自适应)  window.setLayout((int) (screenWidth * 0.95F), LinearLayout.LayoutParams.WRAP_CONTENT);  window.setContentView(R.layout.alert_dialog_text_view_custom);  TextView tvMessage = (TextView) window.findViewById(R.id.textview_message_alert_dialog_text_view_custom);  Button btnCancel = (Button) window.findViewById(R.id.button_cancel_alert_dialog_text_view_custom);  Button btnOk = (Button) window.findViewById(R.id.button_ok_alert_dialog_text_view_custom);  tvMessage.setText("自定义弹出对话框");  btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override  public void onClick(View v) {
                Toast.makeText(context, "点击了取消", Toast.LENGTH_SHORT).show();  ad.dismiss();  }
        });  btnOk.setOnClickListener(new View.OnClickListener() {
            @Override  public void onClick(View v) {
                Toast.makeText(context, "点击了确定", Toast.LENGTH_SHORT).show();  ad.dismiss();  }
        });  }

}

先初始化AlertDialog和Window类,其中Window类很重要,它就是自定义AlertDialog的核心类

ad = new AlertDialog.Builder(context).create(); window = ad.getWindow();

再获取屏幕宽度,设置AlertDialog的属性,再通过Window类来定义自定义AlertDialog的宽度和高度,核心方法是

window.setContentView(R.layout.alert_dialog_text_view_custom);
这里来自定义AlertDialog的布局,最后就是查找控件,设置单击事件,希望对大家有多帮助。

哦,忘记了,还有效果图:

Android学习之自定义AlertDialog_第1张图片Android学习之自定义AlertDialog_第2张图片

Demo地址:http://download.csdn.net/detail/qq_23940659/9467048

你可能感兴趣的:(android,自定义,dialog,对话框,AlertDialog)