<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Spinner
android:id="@+id/spin_status"
android:layout_width="300dp"
android:layout_height="50dp"
android:spinnerMode="dropdown"
/>
</LinearLayout>

xamarin  android spinner的如何使用呢,大多数web开发人员经常会听到DropDownList 和Combobox 这种下拉选择框,spinner 的意思差不多,有道词典一下意思是“下拉列表”、“台湾斯普”,“下拉列表组件”,“微调控件”。xamarin  android中我写几个简单的例子来掌握这个spinner的用法

spinner的相关属性:

  • android:dropDownHorizontalOffset:设置列表框的水平偏移距离
  • android:dropDownVerticalOffset:设置列表框的水平竖直距离
  • android:dropDownSelector:列表框被选中时的背景
  • android:dropDownWidth:设置下拉列表框的宽度
  • android:gravity:设置里面组件的对其方式
  • android:popupBackground:设置列表框的背景
  • android:prompt:设置对话框模式的列表框的提示信息(标题),只能够引用string.xml中的资源id,而不能直接写字符串
  • android:spinnerMode:列表框的模式,有两个可选值:dialog:对话框风格的窗口dropdown:下拉菜单风格的窗口(默认)
  • 可选属性:android:entries:使用数组资源设置下拉列表框的列表项目

1.一个最基本的用法,使用ArrayAdapter数据源,默认的SimpleSpinnerItem样式来绑定数据

看一下效果图:

瞬间感觉丑爆了,的确如此,因为用的的android 默认的SimpleSpinnerItem样式。

布局页加一个Spinner的控件就ok了:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Spinner
android:id="@+id/spin_status"
android:layout_width="300dp"
android:layout_height="50dp"
android:spinnerMode="dropdown"
/>
</LinearLayout>

使用ArrayAdapter为spinner绑定数据

        protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); // Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
Spinner spinner1 = (Spinner)FindViewById(Resource.Id.spin_status);
string[] myWeb = new string[] {"闲蛋客","闲蛋客网赚","闲蛋客博客" };
ArrayAdapter adapter = new ArrayAdapter(this,Android.Resource.Layout.SimpleSpinnerItem,myWeb);
spinner1.Adapter = adapter;
}

代码很少一个spinner最基本的用法就是这样,当然string[] 数据 ,也可以写Xml文件中,那就写一个体验一下吧

首先在布局文件中加上一个entries属性就ok了

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Spinner
android:id="@+id/spin_status"
android:layout_width="300dp"
android:layout_height="50dp"
android:spinnerMode="dialog"
android:entries="@array/myWeb"
/>
</LinearLayout>

写一个xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <string-array name="myWeb">
    <item>闲蛋客</item>
    <item>闲蛋客网赚</item>
    <item>闲蛋客博客</item>
  </string-array>
</resources>

Activity中就不要写绑定数据的代码了。

我们看一下结果是不是一样的,注意一下这个spinnerMode 显示的模式 值有两种 ,dialog ,dropdown (默认的是这个)



似乎效果比上一个SimpleSpinnerItem默认的样式要好一点,但终究两个都是默认很丑陋对不对。这个时候我们就要自己写一个布局吧。

使用自定义布局的方式绑定Spinner的数据源:

上面的array.xml文件已经写好了,就利用上面已经写好的吧。
接着我们就来写一个spin_item_xiandanke.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_web"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>

数据适配器 MyAdapter.cs 比较普通一点的

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Java.Lang; namespace SpinnerDemo.Resources.Adapter
{
public class Xiandnake
{
public int Icon { get; set; }
public string Web { get; set; }
public Xiandnake(int icon ,string web)
{
this.Icon = icon;
this.Web = web;
}
}
public class MyAdapter:BaseAdapter
{
private List<Xiandnake> data;
private Context context; public MyAdapter(Context context, List<Xiandnake> data)
{
this.context = context;
this.data = data;
}
public override int Count
{
get
{
return data.Count;
}
}
public override Java.Lang.Object GetItem(int position)
{
return null;
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder = null;
if (convertView == null)
{
convertView = LayoutInflater.From(context).Inflate(Resource.Layout.spinner_item_xiandanke, null);
holder = new ViewHolder();
holder.Img_icon = convertView.FindViewById<ImageView>(Resource.Id.img_icon);
holder.Tv_Web = convertView.FindViewById<TextView>(Resource.Id.tv_web);
convertView.Tag = holder;
}
else
{
holder = (ViewHolder)convertView.Tag;
}
holder.Tv_Web.Text = data[position].Web;
holder.Img_icon.SetImageResource(data[position].Icon);
return convertView;
}
}
public class ViewHolder:Java.Lang.Object
{
public ImageView Img_icon { get; set; }
public TextView Tv_Web { get; set; }
} }

在activity中绑定数据,MainActivity.cs

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using SpinnerDemo.Resources.Adapter;
using System.Collections.Generic;
namespace SpinnerDemo
{
[Activity(Label = "SpinnerDemo", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
int count = 1;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
List<Xiandnake> data = new List<Xiandnake>();
data.Add(new Xiandnake(Resource.Id.img_icon,"闲蛋客"));
data.Add(new Xiandnake(Resource.Id.img_icon, "闲蛋客博客"));
data.Add(new Xiandnake(Resource.Id.img_icon, "闲蛋客网赚"));
MyAdapter adapter = new MyAdapter(this,data);
Spinner spinner = (Spinner)FindViewById(Resource.Id.spinner_xiandanke);
spinner.SetSelection(2); //设置默认的选择项
spinner.Adapter = adapter;
spinner.ItemSelected += delegate
{
//int index = spinner.SelectedItemId;
int position = spinner.SelectedItemPosition;
Toast.MakeText(this, "你选择的是" + data[spinner.SelectedItemPosition].Web, ToastLength.Short).Show();
};
}
}
}

例子写完,突然感觉毫无创新,这个MyAdapter 值得推敲,完全可以自己重新一个更好的。有愧了。下载的链接地址还是发一下:http://download.csdn.net/detail/kebi007/9675791

作者:张林

标题:Xamarin  android spinner的使用方法 原文地址:http://blog.csdn.net/kebi007/article/details/53055881

转载随意注明出处


Xamarin android spinner的使用方法的更多相关文章

  1. Xamarin.Android SharedPreferences的使用方法

    SharedPreferences的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data/data/<包名>/shared_pref ...

  2. [置顶] xamarin android自定义spinner

    以前弄的一个下拉框时自带的spinner,感觉好丑,实际效果实在满足不了基本的UI界面要求,还是自己动手丰衣足食,看了网上关于android中自定义spinner的文章,感觉实现原理还是比较简单,所以 ...

  3. XAMARIN.ANDROID SIGNALR 实时消息接收发送示例

    SignalR 是一个开发实时 Web 应用的 .NET 类库,使用 SignalR 可以很容易的构建基于 ASP.NET 的实时 Web 应用.SignalR 支持多种服务器和客户端,可以 Host ...

  4. APP并非一个人在战斗,还有API—Xamarin.Android回忆录

    前言 一般来说,一个客户端APP并非独立存在的,很多时候需要与服务器交互.大体可分为两方面的数据,常规字符串数据和文件数据,因为这两种数据很可能传输方式不一样,比如字符串之类的数据,使用HTTP协议, ...

  5. Xamarin.Android通知详解

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

  6. Xamarin.Android之SQLiteOpenHelper

    一.前言 在手机中进行网络连接不仅是耗时也是耗电的,而耗电却是致命的.所以我们就需要数据库帮助我们存储离线数据,以便在用户未使用网络的情况下也可以能够使用应用的部分功能,而在需要网络连接的功能上采用提 ...

  7. Xamarin. Android实现下拉刷新功能

    PS:发现文章被其他网站或者博客抓取后发表为原创了,给图片加了个水印 下拉刷新功能在安卓和iOS中非常常见,一般实现这样的功能都是直接使用第三方的库,网上能找到很多这样的开源库.然而在Xamarin. ...

  8. Xamarin Android Activity全屏的两种方式

    方式一 直接在Activity的Attribute中定义 如下 在 MainActivity 中 [Activity(Label = "app", MainLauncher = t ...

  9. [译]:Xamarin.Android平台功能——位置服务

    返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...

随机推荐

  1. Centos下mongodb的安装与配置

    安装MongoDB的方法有很多种,可以源代码安装,在Centos也可以用yum源安装的方法. 1.准备工作 运行yum命令查看MongoDB的包信息 yum info mongodb-org (提示没 ...

  2. 开源项目 easydownload

    一个用于下载的 android library库,   源码 支持多线程断点下载, 支持消息通知. 支持优先级下载. 支持暂停,继续,删除下载列表 支持多服务器下载. 使用方式 compile 'co ...

  3. iis7 部署网站 403错误

    C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i 403 - 禁止访问: 访问被拒绝. 您无权使用所提供的凭据查看此 ...

  4. Activity讲解

    Activity Activity 是 Android 应用的重要组成单元之一(另外三个是 Service.BroadcastReceiver 和 ContentProvider),而 Activit ...

  5. 本地git部署web连接azure的git存储库

    ​​​本地git部署web 创建本地存储仓库 输入以下命令创建git本地仓库(会在当前目录下生产一个.git的目录) git init 然后提交内容 在git仓库所在的目录下存放好需要的网页文件 将文 ...

  6. 熵(Entropy),交叉熵(Cross-Entropy),KL-松散度(KL Divergence)

    1.介绍: 当我们开发一个分类模型的时候,我们的目标是把输入映射到预测的概率上,当我们训练模型的时候就不停地调整参数使得我们预测出来的概率和真是的概率更加接近. 这篇文章我们关注在我们的模型假设这些类 ...

  7. Servlet,JSP 中的中文乱码问题以及解决方案

    问题描述: 在Servlet,JSP 传递数据中,英文无影响,而中文有时候就会出现乱码. 解决方案: 相同的编码: 同一个项目中的每个文件应当设置和保存相同的编码方式,如: html中 <met ...

  8. 中介者模式(Mediator)

    中介者模式(Mediator) 中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改.如果使用中介者模式,只 ...

  9. Delphi 7中对StretchBlt, StretchDIBits, DrawDibDraw, BitBlt 的性能测试 - 原创

    我的天哪,上一篇博文是2年前的事情了.看来又虚度了2年光阴,继续学习... 本文算是副产品,正品是利用FFmpeg从任意视频中生成GIF片段的小程序,等写完了再发.不为别的,只是为了给儿子做动图,且看 ...

  10. JS 中对变量类型的五种判断方法

    5种基本数据类型:undefined.null.boolean.unmber.string 复杂数据类型:object. object:array.function.date等 方法一:使用typeo ...