实现自定义dialog样式

news2024/11/19 1:34:22

在这里插入图片描述

1定义弹出的dialog样式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <Button

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/mbtn"
        android:text="拨号"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="10sp"
        android:background="#8E8989"/>
    <Button

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/mbtn"
        android:text="10086"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="10sp"
        android:background="#8E8989"/>
    <Button

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/mbtn"
        android:text="取消"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="10sp"
        android:background="#8E8989"/>

</LinearLayout>

在这里插入图片描述

2自定义dialog类,继承自Dialog,并加载自定义dialog的布局

package com.njupt.animination

import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup

class MyDiaglog:Dialog {
    constructor(context: Context?):this(context,0){}

    constructor(context: Context?,themId:Int):super(context!!,themId){
        //在此方法里面加载布局
        setContentView(R.layout.my_dialog)
        //设置在下面弹出
        window?.setGravity(Gravity.BOTTOM)
        //设置弹出的大小
        window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT)
    }

}

3在anim资源文件中定义出dialog的进出动画

入场位置dialog_enter.xml

<?xml version="1.0" encoding="utf-8"?>
<!--平移-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="400"
    android:fromYDelta="100%p"
    android:toYDelta="0">
    
</translate>

出场位置dialog_exit.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="400"
    android:fromYDelta="0"
    android:toYDelta="100%p">

</translate>

4在style文件中指定这两种进出动画,并且将窗口的背景设为透明#00000000

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!--指定dialog的样式-->
    <style name="dialog" parent="@android:style/Theme.Dialog">
        <!--指定dialog的动画-->
        <item name="windowNoTitle">true</item>
        <item name="android:windowAnimationStyle">@style/dialog_anim</item>
        <item name="android:windowBackground">@drawable/transparent</item>
    </style>
    <!--动画的央视-->
    <style name="dialog_anim" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/dialog_enter</item>
        <item name="android:windowExitAnimation">@anim/dialog_exit</item>
    </style>
    <style name="mbtn">
        <item name="android:textColor">@color/white</item>
        <item name="android:textSize">16sp</item>
    </style>
</resources>

其中透明颜色在color.xml布局中

<resources>
    <drawable name="transparent">#00000000</drawable>
</resources>

5在主程序中调用显示dialog

package com.njupt.animination

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

class MainActivity : AppCompatActivity() {
    private val mdialog:MyDiaglog by lazy {
        MyDiaglog(this,R.style.dialog)
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btn=findViewById<Button>(R.id.btn1)
        btn.setOnClickListener(){
            mdialog.show()
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3. 排序

3. 排序 3.1 总纲 3.2 Comparable与Comparator接口介绍 由于我们这里要讲排序&#xff0c;所以肯定会在元素之间进行比较。规则的。在实际应用中&#xff0c;我们往往有需要比较两个自定义对象大小的地方。而这些自定义对象的比较&#xff0c;就不像简单的整型数据那么简单&a…

Python轻量级Web框架Flask(7)——翻页功能/多表操作

1、使用paginate实现分页&#xff1a; 基础指令&#xff08;新建对象&#xff09; 基础指令&#xff08;使用对象属性&#xff09; 2、几种类型的表操作&#xff1a; 一对一&#xff1a;例如一个人只能有一张身份证。一对多&#xff1a;例如班级和学生&#xff08;一个班级…

苦中作乐 ---竞赛刷题 完结篇(25分)

&#xff08;一&#xff09;目录 L2-014 列车调度 L2-024 部落 L2-033 简单计算器 L2-042 老板的作息表 L2-041 插松枝 &#xff08;二&#xff09;题目 L2-014 列车调度 火车站的列车调度铁轨的结构如下图所示。 两端分别是一条入口&#xff08;Entrance&#xff09;轨道…

Java分布式事务(十二)

文章目录 🔥Hmily实现TCC分布式事务_项目搭建🔥Hmily实现TCC分布式事务实战_公共模块🔥Hmily实现TCC分布式事务_集成Dubbo框架🔥Hmily实现TCC分布式事务_项目搭建 创建父工程tx-tcc 设置逻辑工程 <packaging>pom</packaging>创建公共模块 创建转出银行…

分析 | 通过 NFTScan 率先捕获 NFT 投资趋势

NFT 市场信息高度动态且机会稍纵即逝&#xff0c;了解市场第一信息对于 NFT 的参与者来说都是至关重要的。所以市场主体参与者必须密切关注各种渠道&#xff0c;努力获取最新一手 NFT 信息&#xff0c;这对参与者抓住先机和获益至关关键&#xff0c;若信息滞后&#xff0c;容易…

【流畅的Python学习笔记】2023.4.21

此栏目记录我学习《流畅的Python》一书的学习笔记&#xff0c;这是一个自用笔记&#xff0c;所以写的比较随意 特殊方法&#xff08;魔术方法&#xff09; 不管在哪种框架下写程序&#xff0c;都会花费大量时间去实现那些会被框架本身调用的方法&#xff0c;Python 也不例外。…

【Python】matplotlib设置图片边缘距离和plt.lengend图例放在图像的外侧

一、问题提出 我有这样一串代码&#xff1a; import matplotlib.pyplot as plt plt.figure(figsize (10, 6)) " 此处省略代码 " legend.append("J") plt.legend(legend) plt.xlabel(recall) plt.ylabel(precision) plt.grid() plt.show()我们得到的图像…

KMP算法原理原来这么简单

我觉得这句话说的很好&#xff1a; kmp算法关键在于&#xff1a;在当前对文本串和模式串检索的过程中&#xff0c;若出现了不匹配&#xff0c;如何充分利用已经匹配的部分&#xff0c;来继续接下来的检索。 暴力解决字符串匹配 暴力解法就是两层for循环,每次都一对一的匹配&…

面试官:“请描述一下Android系统的启动流程”

作者&#xff1a;OpenGL 前言 什么是Android启动流程呢&#xff1f;其实指的就是我们Android系统从按下电源到显示界面的整个过程。 当我们把手机充好电&#xff0c;按下电源&#xff0c;手机会弹出相应启动界面&#xff0c;在等了一段时间之后&#xff0c;会弹出我们熟悉的主…

AI数据标注工程师这个职业怎么样?

本篇文章主要讲解ai数据标注工程师这个职业的具体情况和相关的职业前景 作者&#xff1a;任聪聪 日期&#xff1a;2023年4月18日 数据是ai的灵魂&#xff0c;自然界中相对应的数据都活多少存在不准确、杂乱、无效等属性&#xff0c;需要人为进行收集、整理、分类和处理。其中ai…

Linux 内核原理摘录

文章目录 一、Linux 内核设计与实现1、进程管理&#xff08;1&#xff09;调度2、内核数据结构&#xff08;1&#xff09;kfifo 3、中断 一、Linux 内核设计与实现 本章主要用来摘录《Linux 内核设计与实现》一书中学习知识点&#xff0c;其基于 Linux 2.6.34 。 1、进程管理 …

PowerShell install go+caddy+filebrowser+nssm 实现部署文件系统

filebrowser filebrowser 是一个使用go语言编写的软件&#xff0c;功能是可以通过浏览器对服务器上的文件进行管理。可以是修改文件&#xff0c;或者是添加删除文件&#xff0c;甚至可以分享文件&#xff0c;是一个很棒的文件管理器&#xff0c;你甚至可以当成一个网盘来使用。…

找高清视频素材,就上这6个网站。

推荐6个高清视频素材库&#xff0c;免费下载&#xff0c;建议收藏~ 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库可以找到设计、办公、图片、视频、音频等各种素材。视频素材就有上千个&#xff0c;全部都很高清&#xff0c;站内可以按标签分类查找…

某医院访问医保系统慢流量分析案例

背景 我们已将NetInside流量分析系统部署到某市人民医院的机房内&#xff0c;使用流量分析系统提供实时和历史原始流量。本次分析重点针对访问外网医保系统性能进行分析&#xff0c;以供安全取证、性能分析、网络质量监测以及深层网络分析。 分析时间 报告分析时间范围为&am…

【Linux】进程间通讯

前提知识 进程间具有独立性 &#xff0c;现在我们要打破独立性&#xff0c;去通讯&#xff0c;所以 通讯的成本一定很高。 又时候又需要多进程协同完成某种业务内容 &#xff0c;例如以前&#xff1a; cat file | grep “hello",这就是两个进程之间的通讯。 通讯的本质就是…

【一文学会MQTT协议和mosquitto】

一文学会MQTT协议和mosquitto 一.、MQTT的基本概念二、mosquittomosquitto基本概念常用API 三、MQTT测试EMQX 一.、MQTT的基本概念 MQTT是一种基于发布/订阅模式的协议&#xff0c;其中发布者发布消息&#xff0c;订阅者订阅感兴趣的主题&#xff08;topic&#xff09;&#x…

QGIS--开发OpenSCENARIO动态场景(二)--安装插件

1.下载并安装ad_map&#xff08;无需构建&#xff09;&#xff1a; 1&#xff09;ad_map插件&#xff1a; https://github.com/carla-simulator/map/releases 下载第一个&#xff1a;ad_map_access_qgis.zip 2&#xff09;导入插件&#xff1a; 从MenuBar的Plugins >…

YOLOv8 更换主干网络之 FasterNet

论文地址:https://export.arxiv.org/pdf/2303.03667v1.pdf 为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。并且,如此低的FLOPS主要…

ThreadLocal InheritableThreadLocal TransmittableThreadLocal的使用以及原理

ThreadLocal 每个线程向ThreadLocal设置值&#xff0c;再取值&#xff0c;实现线程之间的隔离 public class ThreadLocalCase1 {private static ThreadLocal<Integer> threadLocal new ThreadLocal<>();public static void main(String[] args) {Random random …

Postman接口与压力测试实例

Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。它提供功能强大的 Web API & HTTP 请求调试。 1、环境变量和全局变量设置 环境变量可以使用在以下地方&#xff1a; URLURL paramsHeader valuesform-data/url-encoded valuesRaw body contentHelper f…