xamarin android alertdialog详解
来源:互联网 发布:淘宝首页轮播图怎么来 编辑:程序博客网 时间:2024/05/20 13:36
说明一下:学习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);
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.当然还有更高级的自定义的对话框,后面继续...........
阅读全文
0 0
- xamarin android alertdialog详解
- xamarin android alertdialog详解
- Xamarin Android Gestures详解
- Android AlertDialog 详解
- Android AlertDialog 详解
- Android AlertDialog 详解
- Android AlertDialog 详解
- android的AlertDialog详解
- Android的AlertDialog详解
- Android的AlertDialog详解
- Android的AlertDialog详解
- Android的AlertDialog详解
- Android的AlertDialog详解
- Android的AlertDialog详解
- Android的AlertDialog详解
- Android的AlertDialog详解
- Android的AlertDialog详解
- Android的AlertDialog详解
- dp经典问题
- 五分钟学GIS | 如何对接WMTS服务
- svn出现错误svn: Failed to add directory ‘xxx’: an unversioned directory of the same name already
- SharePoint 2016文档库所在数据库表的说明(文档库数据库)
- 杭电5101——二分依旧浪(upper_bound和lower_bound)
- xamarin android alertdialog详解
- hive中的存储方式
- ECSHOP MYSQL 通过邮件模板 生成SQL 含中文字符会有问题
- Shader学习笔记(二)
- Android 编程下与系统屏幕亮度相关的操作
- 一个Mui Demo仓库
- mysql not in 或 in 优化
- Alamofire源码解读系列(二)之错误处理(AFError)
- 谈谈Java中的ThreadLocal