Android中Dialog的使用

上一篇博文讲到对话框popWindow的使用,这篇博文主要讲解Dialog的使用。

1、什么是Dialog?

Dialog就是对话框的一种方式!在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择,这种对话框叫Dialog。最经常使用的,大家也比较熟悉的,也使用比较频繁有AlertDialog,这边篇博文将比较详尽的讲解Dialog的使用。

2、Dialog的特性

Android的对话框有两种:PopupWindow和Dialog。它们的不同点在于:

Dialog的位置固定,而PopupWindow的位置可以随意。

Dialog是非阻塞线程的,而PopupWindow是阻塞线程的。

以上两点是PopupWindow和Dialog最大的不同。

3、AlertDialog的使用

通过查看这句代码AlertDialog定义的源码

public class android.app.AlertDialog extends android.app.Dialog implements android.content.DialogInterface

我们可以发现AlertDialog是继承于Dialog的,然而AlertDialog有几种用法呢,经过整理AlertDialog经常使用的有7种,具体请查看我的博文:

7种形式的Android
AlertDialog使用举例

4、Diglog的重写

当AlertDialog不能满足我们的需求时,我们应该怎么做,因为AlertDialog是继承于Dialog的,那我们是不是也自己重写一个Dialog呢,这个是可以的

以下一个重写Dialog的小示例:

重写Dialog的界面:

XMl界面代码为:

<LinearLayout 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"
    android:background="#60000000"
    android:gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="@drawable/basedl_bg"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="@dimen/dialog_face_hight"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="20dp"
            android:background="@drawable/fw_dialog_signtype_blue"
            android:orientation="horizontal" >

            <ImageView
                android:id="@+id/basedl_iv_head"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="2.5"
                android:padding="5dp"
                android:src="@drawable/ic_head_default" />

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="7.5"
                android:orientation="vertical" >

                <RelativeLayout
                    android:layout_width="fill_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1" >

                    <TextView
                        android:id="@+id/anyfish_dialog_tv_hint"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:layout_alignParentLeft="true"
                        android:gravity="bottom|left"
                        android:paddingLeft="15dp"
                        android:text="对话框名称"
                        android:textColor="#ffffff" />
                </RelativeLayout>

                <TextView
                    android:id="@+id/basedl_tv_hint02"
                    android:layout_width="fill_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:gravity="center_vertical|left"
                    android:paddingLeft="15dp"
                    android:text="对话框注释,解释这个对话框作用"
                    android:textColor="#ffffff"
                    android:textSize="@dimen/dialog_fistype_exp_textsize" />
            </LinearLayout>
        </LinearLayout>

        <EditText
            android:id="@+id/anyfish_dialog_et_input"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="@dimen/dialog_hint_margintop"
            android:background="@drawable/fw_dl_input_et_nor"
            android:ems="10"
            android:gravity="top|left"
            android:hint="请填写内容"
            android:minHeight="50dp"
            android:padding="8dp"
            android:textColor="#bdbedf"
            android:textSize="@dimen/dialog_hint_textsize" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="@dimen/dialog_btn_hight"
            android:layout_marginBottom="14dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="@dimen/dialog_hint_margintop"
            android:gravity="center"
            android:minHeight="50dp"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/btn_ok"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_marginRight="20dp"
                android:layout_weight="1"
                android:background="@drawable/basedl_bt_ok"
                android:text="确定"
                android:textColor="@color/main_textcolor"
                android:textSize="@dimen/dialog_confirmbtn_textsize" />

            <Button
                android:id="@+id/btn_cancel"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:background="@drawable/basedl_bt_cancle"
                android:text="取消"
                android:textColor="@color/main_textcolor"
                android:textSize="@dimen/dialog_confirmbtn_textsize" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

父界面代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:gravity="center"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btn_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="对话框弹出" />

    <TextView
        android:id="@+id/tv_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/btn_dialog"
        android:text="输入内容"
        android:textSize="20sp" />

</RelativeLayout>

重写Dialog代码:

package com.example.myalertdialog;

import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MyAlertDialog extends Dialog {

	private EditText intputEt;
	private Button sumitBtn;
	private Button cancelBtn;
	private Context context;

	public MyAlertDialog(Context context) {
		super(context, R.style.BaseDialogStyle);
		this.context = context;
		initDialog();
	}

	protected void initDialog() {
		setContentView(R.layout.my_dl_type_et);
		intputEt = (EditText) findViewById(R.id.anyfish_dialog_et_input);
		sumitBtn = (Button) findViewById(R.id.btn_ok);
		cancelBtn = (Button) findViewById(R.id.btn_cancel);
		cancelBtn.setOnClickListener(new android.view.View.OnClickListener() {
			@Override
			public void onClick(View v) {
				dismiss();
			}
		});
	}

	/**
	 * 打开弹窗
	 */
	public void onStartDiglog() {
		show();
	}

	/**
	 * 关闭弹窗
	 */
	public void onCloseDiglog(){
		dismiss();
	}

	/**
	 * @return 返回输入值
	 */
	public String getInputValue() {
		if (intputEt != null) {
			return String.valueOf(intputEt.getText()).trim();
		} else {
			return "";
		}
	}

	/**
	 * @param inputValue
	 *            设置输入的值
	 */
	public void setInputValue(String inputValue) {
		if (intputEt != null && inputValue != null) {
			intputEt.setText(inputValue);
		}
	}

	/**
	 * @param onClickListener
	 *            设置的确认键监听事件
	 */
	public void setSumitListener(
			android.view.View.OnClickListener onClickListener) {
		if (sumitBtn != null && onClickListener != null) {
			sumitBtn.setOnClickListener(onClickListener);
		}
	}

}

ps:R.style.BaseDialogStyle为弹出框显示的效果

父activity代码:

package com.example.myalertdialog;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

	private Button dialogBtn;
	private MyAlertDialog myAlertDialog;
	private TextView dialogTv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViews();
		initListener();
	}

	private void findViews(){
		dialogBtn=(Button) findViewById(R.id.btn_dialog);
		dialogTv=(TextView) findViewById(R.id.tv_dialog);
		myAlertDialog=new MyAlertDialog(this);
	}

	private void initListener(){
		myAlertDialog.setSumitListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				dialogTv.setText(myAlertDialog.getInputValue());
				myAlertDialog.onCloseDiglog();
			}
		});
		dialogBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				myAlertDialog.onStartDiglog();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

源码下载地址:资源下载

Android中Dialog的使用,布布扣,bubuko.com

时间: 2024-10-17 14:16:40

Android中Dialog的使用的相关文章

Android中Dialog

在Android中,Dialog是一个非常重要的UI, 它可以方便的给用户提示,用最简洁的方式向用户展示信息, 以下的图片是Dialog的一个整体架构,通过它,可以总体对Dialog有一个很清晰的认识. 从这张图中可以看到,Dialog为父类, 其下有最重要的, 我们最常用的AlertDilog, 而AlertDialog的子类,则是由DatPicker, ProgressDialog,TimePick来组成. 这几个子类都是我们在程序开发中最常用的,因此要重点理解, 我们可以试着想像一下,如下

Android中Dialog对话框的调用及监听

Android中经常会需要在Android界面上弹出一些对话框提示用户,比如App的退出的时候都会有各种框来挽留你的心,支付宝的时候输入密码的密码框,非常常见及其实用的功能,类似于JS中的alter,C#中C/S中常用MessgeBox,总而言之就是一个功能弹,弹,弹,本文就简单的叙述一下Dialog的各种弹框使用及监听,顺便写了一个简单的自定义弹框,接下来请看正文: 一般对话框 先看下整个App页面: 看下一般对话框的结果: 具体代码的实现,其中定义了两个按钮,一个是确定(PositiveBu

Android中Dialog对话框(未完待续)

布局文件xml: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5

Android中Dialog对话框

布局文件xml: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5

我的Android进阶之旅------&gt;Android中Dialog系统样式讲解

今天在维护公司的一个APP的时候,有如下场景. 弹出一个AlertDialog的时候,在系统语言是中文的时候,如下所示: 弹出一个AlertDialog的时候,在系统语言是English的时候,如下所示: 可以发现在系统语言为英语的时候,对话框中的白色文字已经完全看不清楚,对话框的背景颜色也变成了白色.因此需要修改对话框的主题. 修改之前代码如下: AlertDialog commedialog = new AlertDialog.Builder( WalkieTalkieActivity.th

android 中dialog,toast,optionmenu,contextmenu的使用

这几个界面是activity附带主界面之外,开发中常常会用到的界面元素, dialog,toast的界面都是可以自定义的. optionmenu和contextmenu 的界面也可自定义,但是没有dialog那么灵活,它只能自定义一些title,item之类的. 1.dialog自定义界面 AlertDialog dialog=new AlertDialog.Builder(MainActivity.this).create(); dialog.setView(view); 2.toast自定义

Android 自定义Dialog类,并在Activity中实现按钮监听。

实际开发中,经常会用到Dialog,比如退出时候会弹出是否退出,或者还有一些编辑框也会用Dialog实现,效果图如下: 开发中遇到的问题无非在于如果在Activity中监听这个Dialog中实现的按钮,Dialog类如下,在MyDialog这个类中实现了一个LeaveMyDialogListener接口,用来实现onclick的点击事件: package com.Ieasy.Tool; import com.Ieasy.ieasyware.R; import android.app.Dialog

android中给Dialog设置的动画如何自定义修改参数

============问题描述============ 在android中给Dialog设置动画的方法我只找到Dialog.getWindow().setWindowAnimation(int resID); 这样不是只能在styles里用xml定义动画吗? 但是我现在想要先用程序计算出一个屏幕上的点,在让Dialog从该点开始执行scaleAnimation. 我如何给我Dialog的动画设置起始点之类的参数呢? ============解决方案1============ 自定义一个dial

Android中控制Dialog呈现的时间

用线程控制dialog的呈现时间,思路很简单,直接show代码了,我也是为了方便自己记录 private void showProgressDialog() { pDialog = new ProgressDialog(mContext); pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); pDialog.setProgress(100); pDialog.setMessage("请稍等一秒..."); pDialog.se