当前位置: 首页 > news >正文

Android原生Dialog

       在原生android里面,有两种dialog写法,一种是直接使用里面提供的AlertDialog.Builder方法去使用,另一种是我们自己根据自己的ui来设计(自定义)。在一般开发中,我们主要使用的是自定义,主要是AlertDialog.Builder提供的dialog不够美观,此外也可能无法满足我们的业务要求,但为了大家理解dialog这一个情况,我们两种都介绍一下。

1.AlertDialog.Builder方法

AlertDialog.Builder方法中创建dialog我们只需要在java(或kotlin中)调用提供的方法,不需要我们自己去布局xml,我以java来介绍:

(1)创建对象

AlertDialog.Builder builder = new AlertDialog.Builder(this);

(2)调用对象方法

setTitle();设置弹框标题
setMessage();设置弹框信息
builder.setTitle("提示");
builder.setMessage("是否要关闭这个程序");

(3)添加点击按钮以及点击事件

在android开发弹框里,我们只有三种按钮可以设置,分别是消极(negative)、中立(neutral)、积极(positive)按钮,一个按钮只能设置一个,多次设置会由最新的覆盖老的。消极按钮一般用于cancel等取消按键,积极按钮则是sure等确认按键,中立一般需要看业务来进行设置和配置。

在这个过程中,我们用的方法只有下面两种,当我们不想传入点击事件的话我们可以使用null,此外补充一点,在点击事件里的finish是退出程序结束程序进程的作用:

setPositiveButton();设置积极按钮
setNeutralButton();设置中立按钮
setNegativeButton();设置消极按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {finish();}});
builder.setNegativeButton("取消",null);

(4)展示dialog

builder.show();

效果如下:

怎么样,样式是不是很有年代感,所以我们在原生开发中,一般都会使用自定义来满足我们的业务需求和美观需求,接下来我将展示简约的自定义弹框 。

2.自定义方法

(1)设计xml布局

首先我们要设计我们自定义弹框的布局,我下面设计了一个简约的弹框:

activity_newdialog

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/dialog"android:clickable="true"android:orientation="vertical"><TextViewandroid:id="@+id/tips_title"android:textSize="15sp"android:textStyle="bold"android:gravity="center"android:textColor="@color/black"android:text="弹框"android:layout_marginStart="30dp"android:layout_marginEnd="30dp"android:layout_marginTop="20dp"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/tips"android:layout_marginTop="12dp"android:layout_marginStart="30dp"android:layout_marginEnd="30dp"android:layout_marginBottom="20dp"android:textSize="15sp"android:gravity="center"android:textColor="#888888"android:layout_width="match_parent"android:layout_height="wrap_content" /><Viewandroid:background="#EEEEEE"android:layout_width="match_parent"android:layout_height="0.5dp"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:id="@+id/negative_btn"android:layout_marginTop="15dp"android:layout_marginStart="20dp"android:layout_marginEnd="20dp"android:layout_marginBottom="15dp"android:gravity="center"android:textColor="@color/black"android:textStyle="bold"android:textSize="15.55sp"android:text="cancel"android:layout_weight="0.5"android:layout_width="match_parent"android:layout_height="wrap_content" /><Viewandroid:background="#EEEEEE"android:layout_width="0.5dp"android:layout_height="match_parent"/><TextViewandroid:id="@+id/positive_btn"android:layout_marginTop="15dp"android:layout_marginStart="20dp"android:layout_marginEnd="20dp"android:layout_marginBottom="15dp"android:text="sure"android:textColor="@color/black"android:textSize="15.55sp"android:textStyle="bold"android:layout_weight="0.5"android:gravity="center"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>
</LinearLayout>

(2)创建MyDialogActivity

我们创建我们对应的Activity文件,为什么创建这个呢,创建后我们就可以当对象方法使用,我们可以在本文件中设计点击事件,需注意的是,本文件需要继承Dialog类

package com.example.myapplication;import android.app.Dialog;
import android.content.Context;
import android.view.View;import androidx.annotation.NonNull;public class MyDialogActivity extends Dialog {public MyDialogActivity(@NonNull Context context, int themeResId) {super(context, themeResId);setContentView(R.layout.activity_newdialog);findViewById(R.id.positive_btn).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {System.exit(0);}});findViewById(R.id.negative_btn).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dismiss();}});}
}

话外载体一嘴,我们这里是没有finish方法的,那我们替换为System.exit(0);

(3)设置样式

因为我们后面实例化样式的话需要传递两个参数,一个是this,还有一个是我们的样式,所以我们在themes下创建样式

    <style name="mydialog" parent="Theme.MaterialComponents.Dialog"><!-- 透明背景 --><item name="android:windowBackground">@android:color/transparent</item><!-- 隐藏标题栏 --><item name="android:windowNoTitle">true</item><!-- 文字颜色 --><item name="android:textColorPrimary">@color/black</item><!-- 按钮样式 --><item name="buttonBarPositiveButtonStyle">@style/Widget.MaterialComponents.Button.TextButton.Dialog</item><item name="buttonBarNegativeButtonStyle">@style/Widget.MaterialComponents.Button.TextButton.Dialog</item></style>

(4)实例化对象并使用

MyDialogActivity md = new MyDialogActivity(this,R.style.mydialog);
md.show();

最终效果展示:

嗯?是不是比原本原生提供的好看?嗯?那我问你,look at my eyes。

下课! 


文章转载自:
http://arteriogram.ciuzn.cn
http://cardioactive.ciuzn.cn
http://bedew.ciuzn.cn
http://buckjumper.ciuzn.cn
http://assheadedness.ciuzn.cn
http://cam.ciuzn.cn
http://chessylite.ciuzn.cn
http://catchwork.ciuzn.cn
http://celioscope.ciuzn.cn
http://candlemas.ciuzn.cn
http://aryan.ciuzn.cn
http://anchoret.ciuzn.cn
http://chainomatic.ciuzn.cn
http://alu.ciuzn.cn
http://adjacence.ciuzn.cn
http://anatomise.ciuzn.cn
http://ahermatype.ciuzn.cn
http://autoclavable.ciuzn.cn
http://campanula.ciuzn.cn
http://cautery.ciuzn.cn
http://chaqueta.ciuzn.cn
http://admonishment.ciuzn.cn
http://canine.ciuzn.cn
http://cantor.ciuzn.cn
http://catalonian.ciuzn.cn
http://apogeotropically.ciuzn.cn
http://arroyo.ciuzn.cn
http://canonize.ciuzn.cn
http://aceldama.ciuzn.cn
http://bantingism.ciuzn.cn
http://www.dtcms.com/a/280899.html

相关文章:

  • 关于我用AI编写了一个聊天机器人……(番外1)
  • 博客项目 laravel vue mysql 第六章 文章功能
  • PHP:从入门到实战的全面指南
  • 【PTA数据结构 | C语言版】构造二叉树
  • python原生处理properties文件
  • curl请求一直等待但是postman访问正常的问题处理
  • 视频HDR技术全解析:从原理到应用的深度探索
  • IDEA中删除多余的jdk选项 【IDEA2024版】
  • 企业培训视频如何做内容加密防下载防盗录(功能点整理)
  • 零信任安全架构:如何在云环境中重构网络边界?
  • Wing FTP服务器漏洞正遭活跃利用,CVSS评分10分
  • 设计模式之对象池模式
  • 说下对mysql MVCC的理解
  • 深入理解设计模式之外观模式:简化复杂系统的艺术
  • 经典排序算法之希尔排序
  • RTL编程中常用的几种语言对比
  • c#泛型集合
  • Azure FXmsv2 系列与 Azure FXmdsv2 系列虚拟机正式发布
  • Docker 部署emberstack/sftp 镜像
  • JavaScript进阶篇——第四章 解构赋值(完全版)
  • Scrapy扩展深度解析:构建可定制化爬虫生态系统的核心技术
  • 500+技术栈覆盖:Web测试平台TestComplete的对象识别技术解析
  • C#,List<T> 与 Vector<T>
  • 构建强大的物联网架构所需了解的一切
  • Linux下编译海思WS63 SDK全攻略
  • 数据结构:线性表
  • 服务器端安全检测与防御技术概述
  • BGP机房和传统机房之间都有哪些区别?
  • Sentinel热点参数限流完整示例实现
  • 力扣面试150题--排序链表