UI调度:

public class Dispatcher : Handler
    {
        public override void HandleMessage(Message msg)
        {
            var ai = msg.Obj as ActionItem;
            if (ai != null)
            {
                try
                {
                    ai.Result = ai.d.DynamicInvoke(ai.args);
                }
                catch (TargetInvocationException e)
                {
                    ai.Error = e.InnerException;
                }
                catch (Exception e)
                {
                    ai.Error = e;
                }

if (ai.mre != null)
                {
                    ai.mre.Set();
                }
            }
        }

/// <summary>
        /// 同步调用
        /// </summary>
        public object Invoke(Delegate d, params object[] args)
        {
            if (Java.Lang.Thread.CurrentThread().Equals(Looper.Thread))
            {
                return d.DynamicInvoke(args);
            }

var ai = new ActionItem
            {
                d = d,
                args = args,
                mre = new System.Threading.ManualResetEvent(false)
            };

SendMessage(new Message { Obj = ai });

ai.mre.WaitOne();

if (ai.Error != null)
            {
                throw ai.Error;
            }

return ai.Result;
        }

/// <summary>
        /// 异步调用
        /// </summary>
        public void BeginInvoke(Delegate d, params object[] args)
        {
            var msg = new Message()
            {
                Obj = new ActionItem
                {
                    d = d,
                    args = args
                }
            };
            SendMessage(msg);
        }

class ActionItem : Java.Lang.Object
        {
            public Delegate d;

public object[] args;

public object Result;

public Exception Error;

public System.Threading.ManualResetEvent mre;
        }
    }

String.xml中的样式:

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

<style name="dialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>

<!--<item name="android:windowIsTranslucent">false</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:background">@android:color/black</item>
    <item name="android:windowBackground">@null</item>
    <item name="android:backgroundDimEnabled">false</item>-->
  </style>
 
</resources>

倒计时代码:

public class TimerDialog
    {
        #region 成员

AlertDialog mDialog;
        Context mContext;
        int mId = 100;
        Dispatcher dp = new Dispatcher();
        Timer timer;
        public int Seconds { get; set; }

#endregion

#region 方法

/// <summary>
        /// 初始化
        /// </summary>
        public TimerDialog(Context ctx)
        {
            Seconds = 30;
            mContext = ctx;
            mDialog = new AlertDialog.Builder(new ContextThemeWrapper(mContext, Resource.Style.dialog)).Create();

TextView text = new TextView(mContext);
            text.Id = mId;
            text.TextSize = 120;
            text.Text = Seconds.ToString();
            //字体白色
            text.SetTextColor(Android.Graphics.Color.White);
            //居中
            text.Gravity = GravityFlags.Center;

mDialog.SetView(text);

//阻止点击别的地方导致对话框关闭

mDialog.SetCancelable(false);

}
  
        /// <summary>
        /// 显示对话框
        /// </summary>
        public void Show()
        {
            mDialog.SetIcon(Android.Resource.Drawable.IcDialogInfo);
            Start();
            mDialog.Show();
        }

/// <summary>
        /// 开始倒计时
        /// </summary>
        public void Start()
        {
            Stop();
            timer = new Timer(AFunction, null, 0, 1000);
        }

/// <summary>
        /// 倒计时中
        /// </summary>
        private void AFunction(object obj)
        {
            if (Seconds > 0)
            {
                Seconds -= 1;
                dp.BeginInvoke(new Action(() =>
                {
                    (mDialog.FindViewById(mId) as TextView).Text = (Seconds + 1).ToString();
                }));
            }
            else
            {
                Stop();
                dp.BeginInvoke(new Action(() =>
                {
                   mDialog.Dismiss();
                   mDialog.Dispose();
                   mDialog = null;
                }));
            }
        }

/// <summary>
        /// 停止倒计时
        /// </summary>
        public void Stop()
        {
            if (timer != null)
            {
                timer.Dispose();
                timer = null;
            }
        }

#endregion
    }

Activity的调用:

TimerDialog c = new TimerDialog(this);
                c.Show();

转载于:https://www.cnblogs.com/Cindys/archive/2012/10/23/2735466.html

Mono for Android 对话框 倒计时相关推荐

  1. 我的第一个 Mono for Android 应用

    我的第一个 Mono for Android 应用 Mono for Android 初体验, 学习怎么使用 Mono for Anrdoid 创建 android 应用, 如何使用 Intent 启 ...

  2. 解决Mono for android的xml编辑器无法代码完成的问题

    这两天在讲使用.Net开发Android的Mono for android技术,发现使用的开发工具在停止调试的时候特别卡,能卡上几十秒钟,而且经常弹出报错的对话框,严重影响心情,因此昨天就下载安装了最 ...

  3. android闹钟倒计时_如何在Android上使用闹钟,计时器和秒表

    android闹钟倒计时 Your Android device's built-in Clock app can serve as an alarm clock, a kitchen timer, ...

  4. monocross 环境搭建:MonoTouch Mono for Android

    monocross 中各个平台环境不同: 针对ios的MonoTouch只能在OSX上弄.Android 的Mono for Android在mac 及pc机上都可以..... 安装MonoTouch ...

  5. android倒计时功能,android实现倒计时功能(开始、暂停、0秒结束)

    本文实例为大家分享了android实现倒计时功能的具体代码,供大家参考,具体内容如下 [思路]:通过 timer 执行周期延时的任务,handler 中将计时信息更新,并在计时结束时结束 timer ...

  6. C#开发Android应用的必备——Mono for Android V1.0 发布

    Mono for Android V1.0 正式发布啦! Mono for Android就是原先的MonoDroid,由于商标问题(名称中含有Droid),现在改名为Mono for Android ...

  7. Android 对话框(Dialog)大全 建立你自己的对话框

    Android 对话框(Dialog)大全 建立你自己的对话框 创建对话框 一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户 ...

  8. mono for android mysql_mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习...

    以前的我是没有做笔记的习惯的,学习了后觉得自己能记住,但是最近发现很多学的东西都忘记了,所有现在一有新的知识,就记下来吧. 最近又做一个mono for android 的项目 这次调整比较大,上次做 ...

  9. Android(1)—Mono For Android 环境搭建及破解

    0.前言 最近公司打算开发一款Android平台的简单报表查询软件,因本人之前一直是.NET开发的,和领导商定之后决定采用Mono For Android 进行开发,暂时采用破解版进行开发: 下文是记 ...

最新文章

  1. python之⾯向对象-继承
  2. 了解【Docker】从这里开始
  3. jdk动态代理与cglib动态代理例子
  4. .NET Core 以及与 .NET Framework的关系
  5. 用一个Sql语句查询出表中的一个字段的数据类型
  6. 卖掉 3000 平房子,50 岁程序员回国写代码,三个月内融资 2000 万美元
  7. SSH关于公钥认证Permission denied的问题
  8. C语言画爱心代码分析
  9. PTA甲级模拟第六弹:1156-1159
  10. Word2vec词向量
  11. 灵异问题,使用EasyConnect后,用navicat可以访问数据库,但是用Idea跑项目连接超时怎么办?
  12. 微机原理与接口技术的基础知识
  13. 认知升级|系列2|复利思维
  14. 牛客每日练习----可做题,汀博尔,轰炸区最优选取
  15. 小熊派开发板移植RT-FOTA
  16. 家用计算机内存最大是多少,现在电脑内存最大多少
  17. Unity【01 AssetBundle】【02 Lua】
  18. python 计数器每次加1_python 简单计数器的实现
  19. WhiteBox学习
  20. Revit转点云pcd模型

热门文章

  1. 记录自己的nest学习之旅
  2. ES6-9 对象密封4种方式、assign、取值函数的拷贝
  3. javascript+HTML+CSS面试题
  4. 企业云存储:为什么中大型企业偏爱自建私有云?
  5. Saltstack的pillar组件(6)
  6. Cisco设备做流量监控的方法
  7. Android学习之PopupWindow
  8. Portable项目类型之前多个目标类型共享代码的方式
  9. 红帽企业linux4参考指南读书笔记-GRUB引导器
  10. NAND FLASH ECC