各种风格的安卓dialog

本文详细介绍安卓应用中常用的Dialog类型,包括普通对话框、列表选择框、单选框、多选框等,并介绍了如何自定义Dialog样式及加载对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章为大家介绍一些常用的安卓dialog,各种风格都有,相信应该能满足广大读者的需求

第一个是最普通的dialog,弹出一个提示对话框,用户可以选择确定,继续操作,或者点取消,取消操作

private void showDialog() {
		AlertDialog.Builder builder = new Builder(MainActivity.this);

		builder.setTitle("提示");
		builder.setMessage("这是一个普通对话框");

		builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				//点击确认做的操作
				dialog.dismiss();
			}
		});

		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				//点击取消做的操作
				dialog.dismiss();
			}
		});

		builder.create().show();
	}

第二个展示的是一个列表对话框,用户可以从列表中点击选择需要的内容,我们需要传入一个String类型的数组

private void showDialog() {
    	AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
		builder.setIcon(R.drawable.ic_launcher);
		builder.setTitle("选择一个城市");
		// 指定下拉列表的显示数据
		final String[] cities = { "广州", "上海", "北京", "香港", "澳门" };
		// 设置一个下拉的列表选择项
		builder.setItems(cities, new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(MainActivity.this, "选择的城市为:" + cities[which], Toast.LENGTH_SHORT).show();
			}
		});
		builder.show();
	}

第三个展示的是一个单选列表对话框,本对话框主要方法setSingleChoiceItems,需要传入三个参数,第一个参数String类型数组代表选项,第二个参数为int数字作为默认选中索引,这里要注意数组长度,不能大于数组长度,也不能为负数,否则数组越界,第三个参数给每一个单选项绑定一个监听器

private void showDialog() {
    	AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
		builder.setIcon(R.drawable.ic_launcher);
		builder.setTitle("请选择性别");
		final String[] sex = { "男", "女", "未知性别" };
		// 设置一个单项选择下拉框
		/**
		 * 第一个参数指定我们要显示的一组下拉单选框的数据集合 第二个参数代表索引,指定默认哪一个单选框被勾选上,1表示默认'女' 会被勾选上
		 * 第三个参数给每一个单选项绑定一个监听器
		 */
		builder.setSingleChoiceItems(sex, 1, new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(MainActivity.this, "性别为:" + sex[which], Toast.LENGTH_SHORT).show();
			}
		});
		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {

			}
		});
		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {

			}
		});
		builder.show();
	}



第四个dialog为多选列表对话框,代码如下所示,各项参数含义可以看注释

private void showDialog() {
    	AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
		builder.setIcon(R.drawable.ic_launcher);
		builder.setTitle("爱好");
		final String[] hobbies = { "篮球", "足球", "网球", "斯诺克" };
		final boolean[] selectd = {false,true,false,true};
		// 设置一个单项选择下拉框
		/**
		 * 第一个参数指定我们要显示的一组下拉多选框的数据集合
		 * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,
		 * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};
		 * 第三个参数给每一个多选项绑定一个监听器
		 */
		builder.setMultiChoiceItems(hobbies, selectd, new DialogInterface.OnMultiChoiceClickListener() {
			StringBuffer sb = new StringBuffer(100);

			@Override
			public void onClick(DialogInterface dialog, int which, boolean isChecked) {
				
			}
		});
		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {

			}
		});
		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {

			}
		});
		builder.show();
	}



第五个是一个自定义的对话框,我们可以自己在layout文件下建立一个布局,然后通过LayoutInflater加载布局,将获取到的View通过setView添加到dialog中,我们可以通过findViewById方法获取到dialog中的控件实例来操作dialog,具体使用如下所示,my_dialog为自定义的dialog所要加载的布局

private void showDialog() {
    	//	    通过LayoutInflater来加载一个xml的布局文件作为一个View对象
        View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.my_dialog, null);
        final AlertDialog mDialog = new AlertDialog.Builder(MainActivity.this)
				.setView(view).create();
						
		mDialog.setCancelable(true);
		
		final EditText editText = (EditText) view.findViewById(R.id.e_tv);
		
		view.findViewById(R.id.ok).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Toast.makeText(MainActivity.this, editText.getText(), Toast.LENGTH_LONG).show();
				mDialog.dismiss();
			}
		});

		view.findViewById(R.id.cancel).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				mDialog.dismiss();
			}
		});
		mDialog.show();
	}

<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"
    tools:context="com.example.redpoint.MainActivity" >
    
    <TextView 
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="10dp"
        android:textSize="20sp"
        android:textColor="@android:color/holo_green_dark"
        android:text="这是一个自定义dialog"
        />
    
    <EditText
        android:id="@+id/e_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_below="@id/tv1"
        android:hint="请输入内容"
        />
    
    <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="20dp"
        android:layout_below="@id/e_tv"
        android:layout_alignParentRight="true"
        android:orientation="horizontal"
        >
        
    <TextView 
        android:id="@+id/ok"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textColor="@android:color/holo_orange_dark"
        android:text="确认"
        />
    
    <TextView 
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:textSize="18sp"
        android:textColor="@android:color/holo_orange_dark"
        android:text="取消"
        />
    
    </LinearLayout>
       
</RelativeLayout>


第六个是一个圆形进度条加载对话框,比较简单

private void showDialog() {
    	ProgressDialog dialog = new ProgressDialog(this);
    	 dialog.setMessage("正在加载中");
    	 dialog.show();
	}

第七个是设置一个水平的进度条并显示当前进度,只需要把他的样式设置为ProgressDialog.STYLE_HORIZONTAL即可。


private void showDialog() {
    	final ProgressDialog dialog = new ProgressDialog(this);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setMessage("正在加载中");
        dialog.setMax(100);
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            int progress = 0;

            @Override
            public void run() {
                dialog.setProgress(progress += 5);
                if (progress == 100) {
                    timer.cancel();
                }
            }
        }, 0, 1000);
        dialog.show();
	}


下面为大家介绍一下如何设置dialog的样式,分为系统自带的和自定义的,首先来看一下系统自带的,图中的样式和代码中设置的顺序相同

private void showDialog() {
		@SuppressWarnings("deprecation")
		AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_DEVICE_DEFAULT_DARK);
//		AlertDialog.Builder builder = newBuilder(MainActivity.this,AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
//		AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_HOLO_DARK);
//		AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_HOLO_LIGHT);
//		AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_TRADITIONAL);

		builder.setTitle("提示");
		builder.setMessage("这是一个普通对话框");

		builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				//点击确认做的操作
				dialog.dismiss();
			}
		});

		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				//点击取消做的操作
				dialog.dismiss();
			}
		});

		builder.create().show();
	}

我们也可以自己为dialog在style文件中定义一个样式,如下

private void showDialog() {
		@SuppressWarnings("deprecation")
		AlertDialog.Builder builder = new Builder(MainActivity.this,R.style.NormalDialogStyle);

		builder.setTitle("提示");
		builder.setMessage("这是一个普通对话框");

		builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				//点击确认做的操作
				dialog.dismiss();
			}
		});

		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				//点击取消做的操作
				dialog.dismiss();
			}
		});

		builder.create().show();
	}

<!--对话框的样式-->
    <style name="NormalDialogStyle">
        <!--对话框背景 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!--边框 -->
        <item name="android:windowFrame">@null</item>
        <!--没有标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 是否浮现在Activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!--背景透明 -->
        <item name="android:windowIsTranslucent">false</item>
        <!-- 是否有覆盖 -->
        <item name="android:windowContentOverlay">@null</item>
        <!--背景变暗-->
        <item name="android:backgroundDimEnabled">true</item>
    </style>


好了,关于dialog的相关知识就介绍这么多,本篇文章涵盖了大部分的dialog,如果普通的dialog无法满足你的要求,你可以通过自定义一个自己的dialog,通过自定义dialog,你可以实现各种各样的dialog,同时,你还可以根据个人喜好和需求来设置dialog的style,喜欢的朋友点个赞吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值