MainActivity如下:
package cn.testalertdialog; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; import android.widget.Button; /** * Demo说明: * * 自定义Dialog的使用 * * 1 在屏幕中显示自定义Dialog. * 其中按照屏幕大小设置Dialog的显示大小 * * 2 在屏幕底部显示自定义Dialog. * 网上有许多资料都有一个缺陷:Dialog距离屏幕底部总有几毫米的间隙. * 试过许多方法和style都不管用.在此给出一个可行的办法.详见代码. * 3 本示例采用API 15即 4.0.3 * * http://blog.csdn.net/lfdfhl * */ public class MainActivity extends Activity { private Button mButton; private Dialog mDialog; private AlertDialog mAlertDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init(){ mButton=(Button) findViewById(R.id.button); mButton.setOnClickListener(new ButtonOnClickListenerImpl()); } private class ButtonOnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { switch (view.getId()) { case R.id.button: showDialog(MainActivity.this); //showDialogAtScreenBottom(MainActivity.this); break; default: break; } } } //显示自定义Dialog private void showDialog(Context context) { LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View dialogView = inflater.inflate(R.layout.dialogview, null); mDialog = new Dialog(context, R.style.dialog); mDialog.setContentView(dialogView); Window dialogWindow = mDialog.getWindow(); // 获取对话框当前的参数值 WindowManager.LayoutParams layoutParams = dialogWindow.getAttributes(); // 设置对话框高度为屏幕高度的0.3倍 layoutParams.height = (int) (getScreenHeight(context) * 0.3); // 设置对话框宽度为屏幕宽度的0.7倍 layoutParams.width = (int) (getScreenWidth(context) * 0.7); dialogWindow.setAttributes(layoutParams); mDialog.show(); initDialog(dialogView); } //在屏幕底部显示自定义Dialog private void showDialogAtScreenBottom(Context context) { LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View dialogView = inflater.inflate(R.layout.dialogview, null); mAlertDialog = new AlertDialog.Builder(context, R.style.dialog).create(); mAlertDialog.show(); Window window = mAlertDialog.getWindow(); // 将Dialog显示到屏幕的底部 window.setGravity(Gravity.BOTTOM); // 去掉Dialog本身的padding window.getDecorView().setPadding(0, 0, 0, 0); WindowManager.LayoutParams layoutParams = mAlertDialog.getWindow().getAttributes(); // 设置宽度为屏幕宽度 layoutParams.width = getScreenWidth(context); mAlertDialog.getWindow().setAttributes(layoutParams); mAlertDialog.setContentView(dialogView); initAlertDialog(dialogView); } //初始化自定义布局中的控件 private void initDialog(View dialogView){ Button firstButton=(Button) dialogView.findViewById(R.id.dialog_firstButton); firstButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.out.println("点击确定"); } }); Button secondButton=(Button) dialogView.findViewById(R.id.dialog_secondButton); secondButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mDialog!=null&&mDialog.isShowing()) { mDialog.dismiss(); } } }); } //初始化自定义布局中的控件 private void initAlertDialog(View dialogView) { Button firstButton = (Button) dialogView.findViewById(R.id.dialog_firstButton); firstButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.out.println("点击确定"); } }); Button secondButton = (Button) dialogView.findViewById(R.id.dialog_secondButton); secondButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mAlertDialog != null && mAlertDialog.isShowing()) { mAlertDialog.dismiss(); } } }); } /** * 获得屏幕高度 */ public static int getScreenWidth(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.widthPixels; } /** * 获得屏幕宽度 */ public static int getScreenHeight(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.heightPixels; } }
main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_tip" android:textSize="20sp" android:layout_centerInParent="true" /> </RelativeLayout>
dialogview.xml如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:padding="50px" android:orientation="vertical" > <Button android:id="@+id/dialog_firstButton" android:layout_width="200dip" android:layout_height="50dip" android:layout_gravity="center_horizontal" android:layout_marginTop="50px" android:background="@android:color/holo_blue_dark" android:text=" 确 定 " /> <Button android:id="@+id/dialog_secondButton" android:layout_width="200dip" android:layout_height="50dip" android:layout_gravity="center_horizontal" android:layout_marginTop="50px" android:background="@android:color/holo_blue_dark" android:text=" 取 消 " /> </LinearLayout>
style如下:
<style name="dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:windowContentOverlay">@null</item> </style>