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://www.pswp.cn/bicheng/89471.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89471.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89471.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nacos 開源 MCP Router,加速 MCP 私有化部署

作者&#xff1a;正己 Nacos MCP Router 簡介 Nacos MCP Router 是一個基于 MCP 官方 SDK 開發的標準 MCP Server&#xff0c;為 MCP Client 提供 MCP Server 的智能搜索、安裝、代理等功能&#xff0c;極大地簡化了 MCP 服務的使用流程。同時&#xff0c;Nacos MCP Router 跟…

【趙渝強老師】Redis的主從復制集群

Redis的主從復制是指將一臺Redis服務器的數據&#xff0c;復制到其他的Redis服務器。前者稱為Master主節點&#xff0c;后者稱為Slave從節點。數據的復制是單向的&#xff0c;只能由主節點到從節點。在默認情況下每臺Redis服務器都是主節點。一個主節點可以有多個從節點或者沒有…

Git 子模塊只更新部分模塊的問題排查總結

Git 子模塊只更新部分模塊的問題排查總結 問題描述 在執行 git submodule update --init --recursive 命令時&#xff0c;雖然 .gitmodules 文件中定義了 3 個子模塊&#xff0c;但只有 handy-ollama 被更新&#xff0c;其他兩個子模塊沒有被處理。 > git submodule upda…

React 源碼7:Lane、React和schedule優先級轉換

在《源碼3》requestUpdateLane函數根據eventLane獲取不同情況對應優先級。一、優先級1.Lane的tag一共有32種lane。var TotalLanes 31; var NoLanes /* */ 0; var NoLane /* */ 0; var SyncLane /* …

Linux RDMA Maillist patchsets (Jul. 7 - Jul. 13, 2025)

1. Optimize DMABUF Mkey Page Size in mlx5 優化 mlx5 中的 DMABUF Mkey 頁大小 This patch series enables the mlx5 driver to dynamically select the optimal page size for DMABUF-based memory keys (mkeys), rather than relying on a fixed page size during registr…

Maven詳細解

Maven 工具介紹 Maven是Apache組織下的一個跨平臺的項目管理工具&#xff0c;它主要用來幫助實現項目的構建、測試、打包和部署。Maven 提供了標準的軟件生命周期模型和構建模型&#xff0c;通過配置就能對項目進行全面的管理。它的跨平臺性保證了在不同的操作系統上可以使用相…

Springboot兒童攝影服務91f0v(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表項目功能&#xff1a;用戶,員工,攝影套餐,套餐系列,客片欣賞,攝影預約,攝影訂單,取片通知,攝影評價開題報告內容基于Spring Boot的兒童攝影服務系統設計與實現開題報告一、研究背景與意義隨著國家生育政策調整&#xff0c;兒童攝影市場需求呈現爆發式增長。以北…

vue-seo優化

一、為什么 Vue 需要專門做 SEO Vue 默認是客戶端渲染 SPA&#xff0c;首屏 HTML 幾乎為空&#xff0c;爬蟲抓取不到內容&#xff1b;即使 Googlebot 能執行 JS&#xff0c;也存在“渲染預算”與加載延遲問題 二、技術落地 4 條路線 場景技術選型實現要點適用內容更新頻…

DNS防護實戰:用ipset自動攔截異常解析與群聯AI云防護集成

問題場景 DNS服務器常成為黑客探測源IP的首選目標。攻擊者通過高頻DNS查詢獲取解析記錄&#xff0c;或利用異常請求觸發服務器響應&#xff0c;從而定位源站IP。傳統單IP攔截效率低下&#xff0c;難以應對分布式攻擊。 核心解決方案 ipset自動化攔截 ipset是iptables的擴展&…

養老院跌倒誤報頻發?陌訊時空圖卷積實現95%精準檢測

?開篇痛點??> "傳統視覺算法在養老院場景面臨三大挑戰&#xff1a; > ① 夜間低光照下識別率驟降&#xff08;<50% mAP&#xff09; > ② 多人遮擋場景姿態檢測漂移 > ③ 跌倒誤報率高達30%&#xff08;某養老機構2024年報告&#xff09;"通…

[spring6: BeanPostProcessor BeanFactoryPostProcessor]-生命周期

BeanFactoryPostProcessor BeanFactoryPostProcessor 接口允許在 Spring 容器初始化完所有的 bean 定義之后&#xff0c;但還未實例化任何 bean 時&#xff0c;修改應用上下文的內部 bean 工廠。通過實現 postProcessBeanFactory 方法&#xff0c;你可以覆蓋或添加屬性&#xf…

MISRA C-2012準則之聲明與定義

目錄 一、MISRA C簡介 二、聲明與定義 1. 必需。類型應被顯式聲明。 2. 必需。函數應以原型形式命名參數。 3. 必需。所有對象和函數的聲明需要使用完全相同的名字和參數。 4. 必需。當定義有外部鏈接的對象或函數時&#xff0c;兼容聲明應是可見的。 5. 必需。外部變量…

【blender】使用Vscode進行blender調試

配置vscodeblender 直接使用blender中的text editor沒有代碼補全&#xff0c;終端輸出通常和blender不在同一個頁面&#xff0c;只適合非常簡單的代碼測試。使用Vscode能有效提高blender調試的效率&#xff0c;具體方式見&#xff1a;VSCode 開發 Blender腳本工具配置。 調試…

Au速成班-樂理知識補充+網頁下載音樂

音質分類 通過查看音頻頻譜&#xff0c;128Kbps、192Kbps、320Kbps、無損&#xff08;Lossless HD&#xff09;CD音質&#xff08;頻率都在20kHz以上&#xff09;。 各家平臺對無損的定義不一樣&#xff0c;em各有說法吧。 無損的含義是&#xff1a;無損失的聲音格式。只要能…

JAVA中的Collection集合及ArrayList,LinkedLIst,HashSet,TreeSet和其它實現類的常用方法

文章目錄前言一、Collection 接口常用方法1.boolean add(E e)2.boolean remove(Object o)3.boolean contains(Object o)4.boolean isEmpty()5.int size()6.void clear()7.Object[] toArray()8.boolean containsAll(Collection<?> c)9.boolean addAll(Collection<? e…

有n棍棍子,棍子i的長度為ai,想要從中選出3根棍子組成周長盡可能長的三角形。請輸出最大的周長,若無法組成三角形則輸出0。

題目描述&#xff1a; 有n棍棍子&#xff0c;棍子i的長度為ai&#xff0c;想要從中選出3根棍子組成周長盡可能長的三角形。請輸出最大的周長&#xff0c;若無法組成三角形則輸出0。 算法為O(nlogn) 初始理解題目 首先&#xff0c;我們需要清楚地理解題目要求&#xff1a; 輸入…

【Echarts】 電影票房匯總實時數據橫向柱狀圖比圖

效果圖code <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>圓角柱狀圖</title><script src"https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/echarts.min.js"></script> </head> <…

【深度學習基礎】PyTorch中model.eval()與with torch.no_grad()以及detach的區別與聯系?

目錄1. 核心功能對比2. 使用場景對比3. 區別與聯系4. 典型代碼示例(1) 模型評估階段(2) GAN 訓練中的判別器更新(3) 提取中間特征5. 關鍵區別總結6. 常見問題與解決方案(1) 問題&#xff1a;推理階段顯存爆掉(2) 問題&#xff1a;Dropout/BatchNorm 行為異常(3) 問題&#xff1…

博客摘錄「 華為云平臺-FusionSphere OpenStack 8.2.1 系統加固」2025年7月15日

編號 加固項 "風險 等級" 加固原理/Rationale 審計方法/Audit 期望結果/Expect Results 加固方法/Remediation 1 OpenSSH加固配置 1.1 OpenSSH加固配置 1.1.1 SSH使用的版本 H "Op…

永磁同步電機MTPA與MTPV曲線具體仿真實現

永磁同步電機MTPA與MTPV曲線具體仿真實現 近期做了一些標定試驗&#xff0c;實際電機參數并不是確定的&#xff0c;而是變化的&#xff0c;因此很難通過解析的方法算出MTPA的對應點&#xff0c;以及在弱磁區如何過度到MTPV。這個在實際情況下都是一點點標出來的&#xff0c;我這…