Android自定义iOS风格Dialog

【Android】dialogX对话框框架:从基础到高级的全面解析 本文全面解析了Android平台上的DialogX对话框框架,对比原生Dialog,详细介绍了其简洁API、强大自定义能力和丰富的高级组件。通过从基础使用到样式主题、深度自定义及状态管理的实战指南,帮助开发者高效构建健壮且用户体验优秀的对话框,大幅提升开发效率。 阅读详情


效果图:





实现步骤:

1、在res/values/styles中声明自定义风格的style

   <style name="qwsdkDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item><!--边框-->
        <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
        <item name="android:windowIsTranslucent">false</item><!--半透明-->
        <item name="android:windowNoTitle">true</item><!--无标题-->
        <item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
        <item name="android:backgroundDimEnabled">false</item><!--模糊-->
    </style>
2、 在drawable文件夹中声明如下EditText和Dialog主布局的shape

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners android:radius="5dp"/>
    <stroke android:width="0.2dp" android:color="#cccccc"/>
	<solid android:color="#ffffff"/>
</shape>
<shape xmlns:android="http://schemas.android.com/apk/res/android">  
  
    <solid android:color="#eeeeee" />  
    <stroke  
        android:width="0.8dp"  
        android:color="#666666" />  
    <!-- 圆角 -->  
    <corners android:radius="20dp" />  
  
</shape> 
3、创建SexselecDialog继承自Dialog,实现View.OnClickListener接口,在类中自定义接口实现SexselecDialog中控件的监听

public class SexselecDialog extends Dialog{
	private TextView tvCancel;
	private TextView tvMale;
	private TextView tvFemale;
	int layoutRes;
    Context context;
    private OnTextClickdListener mOnTextClickListener; 
    /**
     *
     */
    public interface OnTextClickdListener{
    	void onMaleClick();
    	void onFemaleClick();
    }
    
    public void setOnTextClickListener(OnTextClickdListener listener){
    	this.mOnTextClickListener = listener;
    }
    
    
    
    
    public SexselecDialog(Context context) {
        super(context);
        this.context = context;
    }
    /**
     * @param context
     * @param resLayout
     */
    public SexselecDialog(Context context,int resLayout){
        super(context);
        this.context = context;
        this.layoutRes=resLayout;
    }
    /**
     * @param context
     * @param theme
     * @param resLayout
     */
    public SexselecDialog(Context context, int theme,int resLayout){
        super(context, theme);
        this.context = context;
        this.layoutRes=resLayout;
        
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(layoutRes);   
        init();
        setListener();
        
    }	
    
    private void init(){
    	getWindow().setBackgroundDrawableResource(android.R.color.transparent);
    	try{ int dividerID=context.getResources().getIdentifier("android:id/titleDivider", null, null); 		
    	View divider=findViewById(dividerID); 		
    	divider.setBackgroundColor(context.getResources().getColor(android.R.color.transparent)); 	
    	}catch(Exception e){ 		
    	}
    	tvCancel = (TextView) findViewById(R.id.tv_cancel);
    	tvMale = (TextView) findViewById(R.id.tv_male);
    	tvFemale = (TextView) findViewById(R.id.tv_female);
    }
    
    private void setListener(){
    	tvCancel.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				SexselecDialog.this.dismiss();
			}
		});
    	
    	tvMale.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				mOnTextClickListener.onMaleClick();
				Toast.makeText(context, "男", Toast.LENGTH_SHORT).show();
			}
		});
    	
    	tvFemale.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				mOnTextClickListener.onFemaleClick();
				Toast.makeText(context, "女", Toast.LENGTH_SHORT).show();
			}
		});
    	
    }
}

4、创建SignDialog继承自Dialog,实现View.OnClickListener接口,在类中自定义接口实现SignDialog中控件的监听
public class SignDialog extends Dialog {
	private TextView tvCancel;
	private TextView tvConfirm;
	private EditText editText;
	int layoutRes;
	Context context;
	private OnEditTextChangedListener mOnEditTextChangedListener;
	/**
	 *	自定义监听EditText的回调接口 
	 */
	public interface OnEditTextChangedListener{
		void onChange(String text);
	}
	
	public void setOnEditTextChangedListener(OnEditTextChangedListener listener){
		this.mOnEditTextChangedListener = listener;
	}

	public SignDialog(Context context) {
		super(context);
		this.context = context;
	}

	/**
	 * 
	 * @param context
	 * @param resLayout
	 */
	public SignDialog(Context context, int resLayout) {
		super(context);
		this.context = context;
		this.layoutRes = resLayout;

	}

	/**
	 * 
	 * @param context
	 * @param theme
	 * @param resLayout
	 */
	public SignDialog(Context context, int theme, int resLayout) {
		super(context, theme);
		this.context = context;
		this.layoutRes = resLayout;

	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(layoutRes);
		init();
		setListener();
	}

	private void init() {
		getWindow().setBackgroundDrawableResource(android.R.color.transparent);
		try {
			int dividerID = context.getResources().getIdentifier(
					"android:id/titleDivider", null, null);
			View divider = findViewById(dividerID);
			divider.setBackgroundColor(context.getResources().getColor(
					android.R.color.transparent));
		} catch (Exception e) {

		}

		tvCancel = (TextView) findViewById(R.id.tv_cancel);
		tvConfirm = (TextView) findViewById(R.id.tv_confirm);
		editText = (EditText) findViewById(R.id.edittext);
	}
	
	private void setListener(){
		tvCancel.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				SignDialog.this.dismiss();
			}
		});
		
		//点击确定按钮,回调onChange方法
		tvConfirm.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				mOnEditTextChangedListener.onChange(editText.getText().toString());
			}
		});
	}

}

5、使用Demo

package com.example.dialogs;

import com.example.dialogs.SexselecDialog.OnTextClickdListener;
import com.example.dialogs.SignDialog.OnEditTextChangedListener;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setListeners();
	}

	private void setListeners() {
		Listener l = new Listener();
		findViewById(R.id.bt_sign).setOnClickListener(l);
		findViewById(R.id.bt_nickname).setOnClickListener(l);
		findViewById(R.id.bt_sexselec).setOnClickListener(l);

	}

	private class Listener implements OnClickListener {
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.bt_sign:
				SignDialog signDialog = new SignDialog(MainActivity.this,
						R.layout.qwsdk_dialog_sign);
				signDialog.show();
				signDialog.setOnEditTextChangedListener(new OnEditTextChangedListener() {
					@Override
					public void onChange(String text) {
						// TODO Auto-generated method stub
						
					}
				});
				break;

			case R.id.bt_nickname:
				SignDialog nickDialog = new SignDialog(MainActivity.this,
						R.layout.qwsdk_dialog_nickname);
				nickDialog.show();
				break;
			case R.id.bt_sexselec:
				SexselecDialog sextDialog = new SexselecDialog(
						MainActivity.this, R.layout.qwsdk_dialog_sexselec);
				sextDialog.show();
				sextDialog.setOnTextClickListener(new OnTextClickdListener() {
					@Override
					public void onMaleClick() {
						// TODO Auto-generated method stub
						
					}
					
					@Override
					public void onFemaleClick() {
						// TODO Auto-generated method stub
						
					}
				});
				break;
			}
		}

	}

}

源码下载: http://download.youkuaiyun.com/detail/coder_e/9683447



打造Android上的iOS风格对话框:仿iOS弹出Dialog效果教程 本文还有配套的精品资源,点击获取 简介:在Android开发中实现仿iOS风格的Dialog,提供类似的用户体验。本文深入讲解了如何创建一个具有圆角背景、淡入淡出动画、简洁内容区域和扁平化按钮样式的自定义Dialog,以及如何通过属性设置、回调实现和展示方法来完成这一效果。开发者可利用相关代码和资源文件来学习如何在Android应用中应用这种对话框,以增强应用界面的吸引力和... 阅读详情

相关推荐

Android之IOS风格Dialog对话框

Android之IOS风格Dialog对话框 Android之IOS风格Dialog对话框 Android之IOS风格Dialog对话框

(Kotlin) Android使用DialogX实现iOS风格底部弹窗(带Toggle开关)

本文将详细介绍如何使用DialogX库实现一个iOS风格的底部弹窗,包含。setAlignBottom() 确保内容对齐底部。使用RecyclerView实现高效列表。通过回调处理Toggle状态变化。顶部圆角背景优化视觉效果。自定义动画实现滑动效果。

tangweiguo03051987的博客 933

【Android自定义控件】仿IOS风格的搜索框带删除

这是仿IOS搜索框风格的自定义控件 搜索图标和hint text已经移动到编辑框最左边 输入内容,删除按钮在最右边出现

控制自定义Dialog的大小和位置

/*   * 获取对话框的窗口对象及参数对象以修改对话框的布局设置, * 可以直接调用getWindow(),表示获得这个Activity的Window * 对象,这样这可以以同样的方式改变这个Activity的属性. */ Window dialogWindow = dialog.getWindow(); WindowManager.LayoutParams lp = dialogW

misly_vinky的专栏 2万+

IOSDialog:一个高仿IOSDialog,IOS弹窗

IOSDialog 高仿IODDialog,ios弹窗,ios对话框 看下效果图: 使用方法 step1:在项目gradle根目录下添加 allprojects { repositories { jcenter() maven { url 'https://jitpack.io' } } } step2:在app的gradle根目录下添加 dependencies { compile 'com.github.anzhuojinjie:IOSDialog:1.0' } 具体使用只需要调用下面的方法,五个按钮对应五个效果图 public void btnClick(View view) { switch (view.getId()) { case R.id.btn1:

(详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium)

需求:最近有一个需求,需要将163邮箱收件箱里面的所有邮件的内容全部copy下来,整理到一个word里面,不多也就28页的邮件(不要问我为什么有这需求,不告诉你),自己手动去ctrl+ cv 的话,估计要搞吐。然后就想能不能用python的爬虫来实现,虽然过程比较苦(后期改bug改的要吐了)。但是会后还是将需求实现了。这基本也算是入门了 urllib、requests、selenium这几个py...

man_tou_22 1万+

Android开篇之高仿ios风格的自定义Dialog

一 概述       经常做项目的时候,你会发现。AlertDialog这个控件,我们也经常用到,比如说当你提交一些数据的时候啊,确定是否退出程序的时候啊等等场景,于是我们很自然的想到用到这个控件。当我们开发完成的时候,给测试测的时候。测试来一句“这什么鬼东西,这么丑。能不能做成和ios一样的效果”,宝宝心里苦啊,怪我咯.哎没办法,谁让google自带的效果都是很丑呢(现在最新系统自带的dial

gf的博客 454

基于STM32F103C8T6的红外循迹避障小车

编程思路:控制核心板IO口的电平(即电机驱动模块的AIN1,AIN2,BIN1,BIN2)从而控制AO1、AO2、BO1、BO2的电平高低,进而控制电机使其正转、反转、不转。由于单纯地拉高拉低电平只能让电机在转与不转的状态切换,故决定利用TIM4的两个通道分别产生两路PWM信号来控制电机速度,四个电机两个一组,同一侧的两个连接在同一个PWM上。(#include "dianji.h"文件中同时写了对循迹模块引脚的初始化)

weixin_48743503的博客 1万+

Android实现IOS样式的Dialog

Cupertino Dialog IOS样式的Dialog包括: AlertDialog, ActionSheetDialog 源码地址:https://github.com/wangmingshuo/CupertinoDialog 效果 使用方法 1.添加依赖添加仓库到根build.gradle文件及库依赖 allprojects { repositories { ...

喜欢折腾的开发,Android Java Python 就是玩儿。 693

SPSS(二)SPSS实现多因素方差分析模型(图文教程+数据集)

SPSS(二)SPSS实现多因素方差分析模型 单因素方差分析上一篇博客https://blog.youkuaiyun.com/LuYi_WeiLin/article/details/89917656已经介绍完毕 这篇博客我们主要来学习多因素方差分析 多因素方差分析,就是同时考虑若干个控制因素的情况下,分别分析它们的改变是否造成观察变量的显著变动 (多个自变量,一个因变量)自变量类型以分类变量为主也可以...

可乐联盟 6万+

Qwen3.6-27B 本地部署踩坑实录:两块 4090 折腾一天的真实记录

《Qwen3.6-27B稠密模型部署实战》摘要:本文记录了在双4090(48GB)环境下部署Qwen3.6-27B-FP8量化模型的全过程。重点解决vLLM服务启动时transformers版本不兼容问题,推荐通过构建自定义Docker镜像升级依赖。详细讲解了关键参数配置,包括128K上下文长度保持、MTP推测解码加速等技术细节,并给出显存优化建议。实测表明该稠密模型在27B参数量级下编程能力超越上一代397B MoE模型,单卡即可流畅运行FP8版本,输出速度达90token/s,是开发者理想的编程助手。文

Fzuim的博客 2770

Android模拟IOS风格的自定义Dialog底部弹窗案例

先上效果图: 底部弹窗代码:

美好的一天从”心“开始 1284

深入解析sysmocom eUICC:eSIM技术开发与测试实践指南

本文深入解析了sysmocom eUICC开发板在eSIM技术开发与测试中的应用实践。文章详细介绍了如何根据GSMA证书类型选择合适型号,并指导开发者使用命令行工具lpac和图形界面进行eSIM配置文件管理,最终通过搭建私有SM-DP+服务器完成从生成到下载的全流程测试,为物联网和移动设备开发提供实用指南。

weixin_28358083的博客 405

Android 使用DialogFragment自定义Dialog、IOS风格;

AndroidX版本、DialogFragment实现; Kotlin代码; IOS风格弹框、自定义弹框、底部选择弹框、加载中弹框; 使用方便,一行代码使用弹框,可以高度自定义: https://blog.youkuaiyun.com/qq_35605213/article/details/87864905这篇讲了DialogFragment的基本使用方法; 本项目Github地址:https...

Choi晨的博客 968

Cadence OrCAD Capture 保持元器件编号情况复制元件,复制后元器件编号与复制前不同的问题解决

如下图所示复制时,已经勾选了“Preserve reference on copy”但是复制后的编号却与复制前不一样。本文简单介绍其原因及解决方法。

fydar的博客 3165

【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层

用过CASS的人都知道,野外数字测图得到的点数据(平面坐标)可以直接导入到CASS中,进一步绘制地形图。那么,带有坐标的数据能不能在ArcGIS中实现点图层的生成呢?答案是必须的! 本文以气象台站shp数据的生成为例,详细介绍ArcGIS 10.2中导入X、Y坐标(这里指的是经度、纬度),生成Shapefile点数据的流程。 相关阅读:《全站仪、RTK测量坐标数据在CASS和ArcGIS中展点的区别和联系》 目录 1、数据准备 2、添加X、Y数据 3、属性表连接(Join) 4、导出为Sh.

智慧空间实验室 10万+

android仿ios更新方式,Android中仿IOS提示框的实现方法

前言在Android开发中,我们有时需要实现类似IOS的对话框。今天我就来总结下,如何通过自定义的开发来实现类似的功能。自定义Dialog我们知道Android中最常用的对话框就是Dialog及其派生类。这次我们通过组合的方式来实现一个类似IOS对话框的效果。我们先来看一下布局效果,这个相信大家都能弄出来,在这里我就贴一下最后的效果图(注意:对话框的边缘是圆角的)。效果图如下:我们看到,这个和IO...

weixin_42404983的博客 580

31、编程中的循环控制:从基础到应用

本文深入探讨了编程中的循环控制结构,涵盖从基础概念到实际应用的多个方面。内容包括预测试与后测试循环的区别、For...Next语句的语法与执行流程、计数器变量的作用域及循环条件的控制机制,并通过太空飞船、学生成绩统计等实例演示了循环在真实场景中的使用。同时提供了常见错误分析、优化建议和拓展应用思路,帮助读者全面掌握循环结构的编程技巧。

swift5iosmith的博客 38

【自定义Dialog】封装IOS样式的圆角Dialog

开发项目的时候经常会使用的Dialog,所以给大家分享一个类似IOS风格的Dialog。源码下载实现机制 1.先自定义一个弹出框的样式 2.自己实现MyDialog类,在里面加载自定义样式的弹出框; 3.使用时,与使用Dialog一样

928

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android中仿IOS提示框的实现

前言   在Android开发中,我们有时需要实现类似IOS的对话框。今天我就来总结下,如何通过自定义的开发来实现类似的功能。 自定义Dialog   我们知道Android中最常用的对话框就是Dialog及其派生类。这次我们通过组合的方式来实现一个类似IOS对话框的效果。我们先来看一下布局效果,这个相信大家都能弄出来,在这里我就贴一下最后的效果图(注意:对话框的边缘是圆角的)。 ...

diezhi2505的博客 645

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

学习笔记之——自定义Dialog仿ios弹出底部菜单

先上效果图,自定义Dialog仿ios弹出底部菜单如下所示:                 源码下载地址:

LXLYHM的博客 3148

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Dialog深度解析:如何实现Material、Kongzue、iOS三种UI风格

Dialog对话框库是一个功能强大的Android对话框解决方案,它提供了Material Design、Kongzue和iOS三种流行的UI风格,让开发者能够轻松实现跨平台统一的用户体验。这个开源项目由空祖家开发,旨在为Android开发者提供最简单、最灵活的对话框调用方式,满足不同产品设计需求。 ## 🎨 三种UI风格概览 Dialog库支持三种主流的UI设计风格,每种风格都有其独特的设

gitblog_00321的博客 389

(工具)自定义Dialog仿ios弹出底部菜单

先上效果图,自定义Dialog仿iOS弹出底部菜单如下所示:         根据弹出的效果可以确定其中   取消按钮跟上面的功能按钮有一定的间距,而且取消按钮是固定存在的,上面的功能按钮可以动态添加一个或者多个。         看到这种自定义控件一般都会感叹ios的UI确实很美观,所以安卓端各个大神们就会有更高大上的自定义控件来实现想要的各种效果。作为后辈自然也是很幸运

小小程序员 1320

一个自定义的测评dialog动效小demo

# 博客园的第一篇博客,项目需求待确认的这段时间,有点小闲,把前两天写的一个测评提交的dialog效果先提上来,记录一下。 pc端测评结束后有页面弹窗动效,所以android这边自己写了个小demo。首先贴dialog代码 实际效果图如下: 首先自定义了一个仿ios效果的dialog。代码如下: 1.因为需要一个粒子动画效果,引入了一个开源库:...

weixin_30477293的博客 237

[Android] 仿IOS实现自定义Dialog,底部弹窗和中间弹窗工具

用过Android的默认对话框的都懂,不管是哪个版本的对话框,都丑到爆!就算是Google推崇的Material Design风格的弹窗一样不好看,基本每款APP都不会去使用默认的对话框样式,他们都有自己的风格,怎样去改变默认的对话框样式呢?只能自定义了,将系统对话框改为自己喜欢或者是APP特有风格的样式。本文将介绍如何去实现自定义Dialog,仿IOS,并添加动画效果,并提供丰富的方法调用,让开...

樱_花_庄 4141

Dialog 自定义使用2(进度条)

1: 自定义的Dialog 代码: public class IphoneProgersssDialog extends Dialog { private Context context; private ImageView img; private TextView txt; public IphoneProgersssDialog(Cont...

weixin_30273763的博客 89
上一篇: 自定义ViewGroup之Topbar----布局代码的缩减,实现app风格的高度一致
下一篇: Android Studio获取SHA1证书方法
coder_e
博客等级 码龄10年 6粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值