Dialog(五)——自定义对话框(Dialog)-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

Dialog(五)——自定义对话框(Dialog)

简介: MainActivity如下: package cn.testalertdialog; import android.app.Activity; import android.

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>


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章