说明一下:学习xamarin android一段时间,准备写一些xamarin android相关的例子,alertdialog也是使用的非常多得空间之一,非常感谢鸟巢上的小猪,我也是看着他写的教程学会的。参考他的那一章 http://www.runoob.com/w3cnote/android-tutorial-alertdialog.html

1.基本使用流程

  • Step 1:创建AlertDialog.Builder对象;
  • Step 2:调用setIcon()设置图标,setTitle()setCustomTitle()设置标题;
  • Step 3:设置对话框的内容:setMessage()还有其他方法来指定显示的内容;
  • Step 4:调用setPositive/Negative/NeutralButton()设置:确定,取消,中立按钮;
  • Step 5:调用create()方法创建这个对象,再调用show()方法将对话框显示出来;

2.几种常用的对话框使用示例

运行效果图:

主要代码:MainActivity.class

public class MainActivity : Activity
{
int count = 1;
private Button btn_alertDialog_one, btn_alertDialog_two, btn_alertDialog_three, btn_alertDialog_four; private bool[] checkItems;
private AlertDialog alertDialog = null;
private AlertDialog.Builder builder = null;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
bindViewClick();
} private void bindViewClick()
{
btn_alertDialog_four = FindViewById<Button>(Resource.Id.btn_alertDialog_four);
btn_alertDialog_three = FindViewById<Button>(Resource.Id.btn_alertDialog_three);
btn_alertDialog_two = FindViewById<Button>(Resource.Id.btn_alertDialog_two);
btn_alertDialog_one = FindViewById<Button>(Resource.Id.btn_alertDialog_one); btn_alertDialog_one.Click += delegate { onClick(btn_alertDialog_one); };
btn_alertDialog_two.Click += delegate { onClick(btn_alertDialog_two); };
btn_alertDialog_three.Click += delegate { onClick(btn_alertDialog_three); };
btn_alertDialog_four.Click += delegate { onClick(btn_alertDialog_four); };
}
private void onClick(View v)
{
switch (v.Id)
{
case Resource.Id.btn_alertDialog_one:
alertDialog = null;
builder = new AlertDialog.Builder(this);
alertDialog = builder
.SetTitle("sure")
.SetMessage("are you sure exit?")
.SetNegativeButton("cancel", (s, e) =>
{
Toast.MakeText(this, "you click cancel", ToastLength.Short).Show();
})
.SetPositiveButton("sure", (s, e) =>
{
Toast.MakeText(this, "you click sure", ToastLength.Short).Show();
})
.SetNeutralButton("neutra", (s, e) => {
Toast.MakeText(this, "you click neutra", ToastLength.Short).Show();
})
.Create(); //创建alertDialog对象 alertDialog.Show();
var dialog = new AlertDialog.Builder(this);
break; case Resource.Id.btn_alertDialog_two:
alertDialog = null;
builder = new AlertDialog.Builder(this);
string[] players = new string[] {"杜兰特","汤普森","考辛斯","卡戴珊"};
alertDialog = builder
.SetIcon(Resource.Drawable.players)
.SetTitle("选择你喜欢的球员")
.SetItems(players, (s, e) =>
{
Toast.MakeText(this, "you selected " + players[e.Which], ToastLength.Short).Show();
})
.Create();
alertDialog.Show();
break; case Resource.Id.btn_alertDialog_three:
var a = new AlertDialog.Builder(this);
string[] teams = new string[] {"骑士","公牛","快船","马刺","勇士" };
a.SetTitle("你认为下个赛季哪只球队能夺冠")
.SetSingleChoiceItems(teams, 0, (s, e) =>
{
Toast.MakeText(this, "you selected " + teams[e.Which], ToastLength.Short).Show();
})
.Create();
a.Show();
break; case Resource.Id.btn_alertDialog_four:
var b = new AlertDialog.Builder(this);
string[] menu = new string[] { "麻婆豆腐","羊蝎子","驴肉火烧","辣子鸡丁"};
checkItems = new bool[] {false,false,false,false};
b = b.SetIcon(Resource.Drawable.Icon)
.SetMultiChoiceItems(menu, checkItems, (s, e) => {
//Toast.MakeText(this, "you selected " + menu[e.Which], ToastLength.Short).Show();
checkItems[e.Which] = e.IsChecked;
})
.SetPositiveButton("确定", (s, e) => {
string result = string.Empty;
for (int i = 0; i < checkItems.Length; i++)
{
if (checkItems[i])
{
result += menu[i] + ",";
}
}
Toast.MakeText(this, "you selected " + result, ToastLength.Short).Show();
});
b.Create();
b.Show();
break;
}
}
}

用法非常简单创建一个Builder对象后,调用Create方法创建一个AlertDialog对象,最后调用show方法显示出来,当然你也可以像这样直接new 一个AlertDialog对象

 var b = new AlertDialog.Builder(this);

设置一个setCancelable (true|false)看看有没有什么区别

3.通过Builder的setView()定制显示的AlertDialog

我们可以自定义一个与系统对话框不同的布局,然后调用setView()将我们的布局加载到AlertDialog上,上面我们来实现这个效果:

我就贴一下几个主要的布局和样式文件

1.对话框头部的取消按钮样式:在drawable文件下创建一个btn_selector_exit.xml文件,在这里要注意一点item下的属性android:background=“#dedede”,这样直接写会报错,我这里用的是换颜色,所以我在string.xml文件下写了两个颜色,大家要注意一下,我有点想不通的是为什么background属性直接写颜色代码会出错,有点郁闷,如果你有好的解释也可以告诉我这个android的 菜鸟

<drawable name="pressed_color">#0cb026</drawable>

  <drawable name="default_color">#53cc66</drawable>

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/exit_press"/>
<item android:drawable="@drawable/exit"/>
</selector>

2.底部两个按钮按下换背景色的样式新建一个btn_selector_choose.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/pressed_color" />
<item android:drawable="@drawable/default_color" />
</selector>

3.最重要的还是<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_relative"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--头部-->
<RelativeLayout
android:id="@+id/layout_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="#53cc66"
android:padding="5dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="提示文本"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="#ffffff"
/>
<Button
android:id="@+id/btn_cancel"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:background="@drawable/btn_selector_exit" />
</RelativeLayout>
<!--中间内容-->
<LinearLayout
android:id="@+id/layout_detail"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_below="@+id/layout_title"
android:layout_centerInParent="true"
android:orientation="vertical"
android:background="#f1f1f1"
android:padding="20dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="通过setView方法定制alertDialog"
android:textColor="#04AEDA"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="作者:张林"
android:textColor="#04AEDA"
android:textSize="18sp" />
</LinearLayout>
<!--底部按钮-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/layout_detail"
android:orientation="horizontal"
android:background="#f1f1f1"
android:padding="5dp"
>
<Button
android:id="@+id/btn_blog"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_weight="1"
android:background="@drawable/btn_selector_choose"
android:text="访问博客"
android:textColor="#ffffff"
android:textSize="20sp"
android:layout_marginRight="5dp"
/> <Button
android:id="@+id/btn_close"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_weight="1"
android:background="@drawable/btn_selector_choose"
android:text="关闭对话框"
android:textColor="#ffffff"
android:textSize="20sp" /> </LinearLayout>
</RelativeLayout>

mainactivity代码,这个布局我就不贴了。

  public class MainActivity : Activity
    {
        private AlertDialog alertDialog = null;
        private AlertDialog.Builder builder = null;
        private Button btn_show = null;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
             bindViewClick();
            builder = new AlertDialog.Builder(this);
         
            LayoutInflater layoutInflater = LayoutInflater.From(this);
            var view_customer = layoutInflater.Inflate(Resource.Layout.view_dialog_custom, null, false);             builder.SetView(view_customer);
            builder.SetCancelable(false);
            alertDialog = builder.Create();
            view_customer.FindViewById(Resource.Id.btn_cancel).Click += (s, e) =>
            {
                Toast.MakeText(this, "对话框已关闭", ToastLength.Short).Show();
                alertDialog.Dismiss();
            };
            view_customer.FindViewById(Resource.Id.btn_blog).Click += delegate
            {
                Toast.MakeText(this, "正在访问博客", ToastLength.Short).Show();
                Uri uri = Uri.Parse("http://blog.csdn.net/kebi007");
                Intent intent = new Intent(Intent.ActionView, uri);
                StartActivity(intent);
                alertDialog.Dismiss();
            };
            view_customer.FindViewById(Resource.Id.btn_close).Click += delegate
            {
                Toast.MakeText(this, "对话框已关闭", ToastLength.Short).Show();
                alertDialog.Dismiss();
            };             btn_show = FindViewById<Button>(Resource.Id.btn_show);
            btn_show.Click += delegate { alertDialog.Show(); };
        }
    }

4.当然还有更高级的自定义的对话框,后面继续...........

xamarin android alertdialog详解的更多相关文章

  1. Xamarin.Android通知详解

    一.发送通知的机制 在日常的app应用中经常需要使用通知,因为服务.广播后台活动如果有事件需要通知用户,则需要通过通知栏显示,而在Xamarin.Android下的通知需要获取Notification ...

  2. Xamarin Android Gestures详解

    通过Gesture的监听我们将实现一个,手指的快速滑动显示坐标的变化,我们先来看一看效果图: 1.Android中手势交互的执行顺序 1.手指触碰屏幕时,触发MotionEvent事件! 2.该事件被 ...

  3. Android进阶(十四)Android Adapter详解

    Android Adapter详解 Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View.因为layout五花八门,很多数据都不能直接绑定上去, ...

  4. Xamarin+Prism开发详解七:Plugin开发与打包测试

    有了上章[Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系]的基础,现在来理解Plugin开发就简单了. 本文实例代码地址:ht ...

  5. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  6. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  7. Android ActionBar详解

    Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar   目录(?)[+]   第4 ...

  8. Android 签名详解

    Android 签名详解 AndroidOPhoneAnt设计模式Eclipse  在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程 ...

  9. Android编译系统详解(一)

    ++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.csdn.net/mr_raptor/art ...

随机推荐

  1. Bitmap.Config 说明 ALPHA_8 ARGB_4444 ARGB_8888 RGB_565

    这篇文章的目的是了解Bitmap.Config 你可以在使用这个方法的时候会遇到 Bitmap android.graphics.Bitmap.createBitmap(int width, int ...

  2. linux文件、目录

    user用户 group用户组 others其他人用户信息保存在/etc/passwd [root@iZ25het8xn8Z ~]# ls -altotal 56dr-xr-x---. 3 root ...

  3. 变位词(0029)-swustoj

    变位词(0029)水题 变位词如果两个单词的组成字母完全相同,只是字母的排列顺序不一样,则它们就是变位词,两个单词相同也被认为是变位词.如tea 与eat , nic 与cin, ddc与dcd, a ...

  4. 给负载均衡器添加多IP

    看到一个场景,针对web应用的一个需求,需要在负载均衡器设置多个公网ip. 给负载均衡器添加多个公共ip 创建多个虚拟机,同时把他们添加到同一个可用性集中,方便后期部署到负载均衡器. 创建多个公网ip ...

  5. js 获取每月有几周,根据年月周获取该周从周一到周日的日期等方法

    本文基于react-native 本人在用react-native写一个关于课程表的APP时需要课程表按照日期周期显示,网上查了许多方法,都没有达到自己想要的效果,根据一些方法的参考,再根据自己思维写 ...

  6. RabbitMQ安装步骤

    给centos安装epel yum 源 # rpm -ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.r ...

  7. 方格取数洛谷p1004

    题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...

  8. PHP魔术方法和魔术变量总结

    从php5以后的版本,类就可以使用魔术方法了.PHP规定以两个下划线开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开 头,除非是为了重载已有的魔术方法. 目前php已有的魔术方法有 __c ...

  9. Android Weekly Notes Issue #287

    Android Weekly Issue #287 December 10th, 2017 Android Weekly Issue #287 圣诞节快要来了,小编也偷懒了,本期内容包括如何通过AS添 ...

  10. 【luogu2583】地铁间谍

    https://www.luogu.org/problem/show?pid=2583 设在时刻i,车站j到结束最短需要等待f(i,j)分钟,得状态转移方程: f(i,j)=min{     f(i+ ...