电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android自定義Dialog原理實例解析

瀏覽:43日期:2022-09-23 09:47:48

Android開發過程中,常常會遇到一些需求場景——在界面上彈出一個彈框,對用戶進行提醒并讓用戶進行某些選擇性的操作,

如退出登錄時的彈窗,讓用戶選擇“退出”還是“取消”等操作。

Android系統提供了Dialog類,以及Dialog的子類,常見如AlertDialog來實現此類功能。

一般情況下,利用Android提供的Dialog及其子類能夠滿足多數此類需求,然而,其不足之處體現在:

1. 基于Android提供的Dialog及其子類樣式單一,風格上與App本身風格可能不太協調;

2. Dialog彈窗在布局和功能上有所限制,有時不一定能滿足實際的業務需求。

本文將通過在Dialog基礎上構建自定義的Dialog彈窗,以最常見的確認彈框為例。

本樣式相對比較簡單:上面有一個彈框標題(提示語),下面左右分別是“確認”和“取消”按鈕,當用戶點擊“確認”按鈕時,彈框執行

相應的確認邏輯,當點擊“取消”按鈕時,執行相應的取消邏輯。

首先,自定義彈框樣式:

<?xml version='1.0' encoding='utf-8'?><LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:layout_height='wrap_content' android:background='@drawable/dialog_bg' android:orientation='vertical' > <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_gravity='center' android:paddingTop='14dp' android:textColor='@color/login_hint' android:textSize='@dimen/text_size_18' /> <LinearLayout android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_marginBottom='14dp' android:layout_marginLeft='20dp' android:layout_marginRight='20dp' android:layout_marginTop='30dp' > <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_marginRight='10dp' android:layout_weight='1' android:background='@drawable/btn_confirm_selector' android:gravity='center' android:textColor='@color/white' android:textSize='@dimen/text_size_16' /> <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_marginLeft='10dp' android:layout_weight='1' android:background='@drawable/btn_cancel_selector' android:gravity='center' android:textColor='@color/login_hint' android:textSize='@dimen/text_size_16' /> </LinearLayout></LinearLayout>

然后,通過繼承Dialog類構建確認彈框控件ConfirmDialog:

package com.corn.widget;import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.LayoutInflater;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.TextView;import com.corn.R;public class ConfirmDialog extends Dialog { private Context context; private String title; private String confirmButtonText; private String cacelButtonText; private ClickListenerInterface clickListenerInterface; public interface ClickListenerInterface { public void doConfirm(); public void doCancel(); } public ConfirmDialog(Context context, String title, String confirmButtonText, String cacelButtonText) { super(context, R.style.MyDialog); this.context = context; this.title = title; this.confirmButtonText = confirmButtonText; this.cacelButtonText = cacelButtonText; } @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); init(); } public void init() { LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.confirm_dialog, null); setContentView(view); TextView tvTitle = (TextView) view.findViewById(R.id.title); TextView tvConfirm = (TextView) view.findViewById(R.id.confirm); TextView tvCancel = (TextView) view.findViewById(R.id.cancel); tvTitle.setText(title); tvConfirm.setText(confirmButtonText); tvCancel.setText(cacelButtonText); tvConfirm.setOnClickListener(new clickListener()); tvCancel.setOnClickListener(new clickListener()); Window dialogWindow = getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); DisplayMetrics d = context.getResources().getDisplayMetrics(); // 獲取屏幕寬、高用 lp.width = (int) (d.widthPixels * 0.8); // 高度設置為屏幕的0.6 dialogWindow.setAttributes(lp); } public void setClicklistener(ClickListenerInterface clickListenerInterface) { this.clickListenerInterface = clickListenerInterface; } private class clickListener implements View.OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub int id = v.getId(); switch (id) { case R.id.confirm:clickListenerInterface.doConfirm();break; case R.id.cancel:clickListenerInterface.doCancel();break; } } };}

在如上空間構造代碼中,由于控件的'確認'和'取消'邏輯與實際的應用場景有關,因此,控件中通過定義內部接口來實現。

在需要使用此控件的地方,進行如下形式調用:

public static void Exit(final Context context) { final ConfirmDialog confirmDialog = new ConfirmDialog(context, '確定要退出嗎?', '退出', '取消'); confirmDialog.show(); confirmDialog.setClicklistener(new ConfirmDialog.ClickListenerInterface() { @Override public void doConfirm() {// TODO Auto-generated method stubconfirmDialog.dismiss();//toUserHome(context);AppManager.getAppManager().AppExit(context); } @Override public void doCancel() {// TODO Auto-generated method stubconfirmDialog.dismiss(); } }); }

調用中實現了此控件的內部接口,并賦給控件本身,以此在點擊按鈕時實現基于外部具體業務邏輯的函數回調。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
主站蜘蛛池模板: 陕西安玻璃自动感应门-自动重叠门-磁悬浮平开门厂家【捷申达门业】 | 北京京云律师事务所 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 网站建设-网站制作-网站设计-网站开发定制公司-网站SEO优化推广-咏熠软件 | 精密光学实验平台-红外粉末压片机模具-天津博君 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 优宝-汽车润滑脂-轴承润滑脂-高温齿轮润滑油脂厂家 | 苹果售后维修点查询,苹果iPhone授权售后维修服务中心 – 修果网 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 建筑资质代办-建筑企业资质代办机构-建筑资质代办公司 | 杭州可当科技有限公司—流量卡_随身WiFi_AI摄像头一站式解决方案 | 湖南自考_湖南自学考试网 | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 三价铬_环保铬_环保电镀_东莞共盈新材料贸易有限公司 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 股票入门基础知识_股票知识_股票投资大师_格雷厄姆网 | 路面机械厂家 | PE拉伸缠绕膜,拉伸缠绕膜厂家,纳米缠绕膜-山东凯祥包装 | 定坤静电科技静电消除器厂家-除静电设备| 压力变送器-上海武锐自动化设备有限公司| 超声波分散机-均质机-萃取仪-超声波涂料分散设备-杭州精浩 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 金现代信息产业股份有限公司--数字化解决方案供应商 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 护栏打桩机-打桩机厂家-恒新重工| 江苏全风,高压风机,全风环保风机,全风环形高压风机,防爆高压风机厂家-江苏全风环保科技有限公司(官网) | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | 书信之家_书信标准模板范文大全 最新范文网_实用的精品范文美文网 |