Dialog从0到1

简介: Dialog从0到1

Dialog提示框演示

Dialog样式(去除自定义dialog四角默认色)

样式一

<resources xmlns:tools="http://schemas.android.com/tools">

    <!-- dialog样式 -->
    <style name="DialogTheme" parent="@android:style/Theme.Dialog">
        <!-- 边框 -->
        <item name="android:windowFrame">@null</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- 无标题 -->
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <!-- 背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 模糊 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 遮罩层 -->
        <item name="android:backgroundDimAmount">0.5</item>
    </style>

</resources>

样式二

<resources xmlns:tools="http://schemas.android.com/tools">

    <style name="DialogTheme" parent="@android:style/Theme.DeviceDefault.Light.Dialog">
      <item name="android:windowFrame">@null</item><!-- 边框 -->
      <item name="android:windowIsFloating">true</item><!-- 是否浮现在activity之上 -->
      <item name="android:windowIsTranslucent">true</item><!-- 半透明 -->
      <item name="android:windowNoTitle">true</item><!-- 无标题 -->
      <item name="android:backgroundDimEnabled">false</item><!-- 背景模糊 -->
      <item name="android:windowBackground">@android:color/transparent</item><!-- 背景色 -->
  </style>
    
</resources>

引用方法

// 样式一
Dialog dialog = new Dialog(context, R.style.DialogTheme);

// 样式二
AlertDialog dialog = new AlertDialog.Builder(activity,R.style.DialogTheme).setView(view).show();

ialog方法

设置不可点击dialog以外的区域

// 设置不可点击dialog以外的取余
dialog.setCanceledOnTouchOutside(false);

dialog去掉头部标题栏

// dialog去掉头部标题栏(去掉标题栏这句一定要写在setContentView()方法的前面,不然会报错)
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

dialog设置显示位置

// dialog设置居中显示
dialog.getWindow().setGravity(Gravity.CENTER);

dialog解决不能居中

// 原因是dialog里面也是有头部标题栏存在的,去掉头部标题栏,再设置居中显示即可
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Window mWindow = dialog.getWindow();
mWindow.setGravity(Gravity.CENTER);

dialog设置偏移量

dialog.getWindow().getAttributes().x = 25;

动态设置dialog宽高

if (myDataList.size() == 1) {
  dialog.getWindow().setLayout(600, 600);
} else {
  dialog.getWindow().setLayout(600, 900);
}

监测dialog是否dismiss(可用于监听返回键)

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
  @Override
  public void onCancel(DialogInterface dialog) {
    imageView.setVisibility(View.VISIBLE);
    textView.setVisibility(View.VISIBLE);
  }
});

简单的取消重试Dialog

AlertDialog.Builder builder = new AlertDialog.Builder(myContext);
builder.setMessage("初始化失败,请重试");
builder.setPositiveButton("重试", new DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialog, int which) {
    dialog.dismiss();
    init();
  }
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialog, int which) {
    dialog.dismiss();
    finish();
  }
});
builder.show();

自定义Dialog

  public static void showDialog(Activity activity) {
        if (myDataList == null) {
            return;
        }
        View view = activity.getLayoutInflater().inflate(R.layout.my_dialog, null);
        AlertDialog dialog = new AlertDialog.Builder(activity, R.style.DialogTheme).setView(view).show();
        dialog.setCanceledOnTouchOutside(false);
        if (dialog.getWindow() == null) {
            return;
        }
        dialog.getWindow().setGravity(Gravity.CENTER);
        if (myDataList.size() == 1) {
            dialog.getWindow().setLayout(600, 600);
        } else {
            dialog.getWindow().setLayout(600, 900);
        }
        ImageView close = view.findViewById(R.id.iv_close);
        TextView name = view.findViewById(R.id.tv_name);
        ListView lvData = view.findViewById(R.id.lv_data);

        close.setOnClickListener(v -> {
            dialog.dismiss();
        });

        // 按照序号排序
        myDataList.sort(Comparator.comparing(MyData::getNum));

        name.setText(myDataList.get(0).getName());
        UserInfoAdapter userInfoAdapter = new UserInfoAdapter(activity, myDataList);
        lvData.setAdapter(userInfoAdapter);
    }
目录
相关文章
|
Android开发
Android 实现布局的缩小和再放大动画(使用scale动画效果进行实现)
Android 实现布局的缩小和再放大动画(使用scale动画效果进行实现)
1124 0
|
Android开发
【Android 安装包优化】移除无用资源 ( 自动移除无用资源 | 直接引用资源 | 动态获取资源 id | Lint 检查资源 )(一)
【Android 安装包优化】移除无用资源 ( 自动移除无用资源 | 直接引用资源 | 动态获取资源 id | Lint 检查资源 )(一)
660 0
【Android 安装包优化】移除无用资源 ( 自动移除无用资源 | 直接引用资源 | 动态获取资源 id | Lint 检查资源 )(一)
|
移动开发 API Android开发
Android音频管理之AudioManager(原创)
本文已独家授权 郭霖 ( guolin_blog ) 公众号发布! 本篇文章主要介绍的是Android应用(WebView加载H5的音频管理只是其中的一种)如何有效管理或定制音频的基本内容和一些思路。
2359 0
|
移动开发 JavaScript Java
android webview增强版,对原生webview的一些解决方案
MWebView 根据 Tamicer/JsWebView 修改定制 为什么要使用WebView 随着app业务的不断深入发展,只靠着原生代码来堆砌功能是不现实,毕竟开发的时长会增加,而且同时需要开发iOS和Android两套,并且,如果在UI上改变了一丁点,都需要提包(虽然Android现在可以进行热更新,但是热更新不是100%能生效的,其中的原理只要了解过的
3850 0
|
5天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
16天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1317 7
|
3天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。