【Android】7.0 第7章 简单适配器和布局--本章示例主界面
分类:C#、Android、VS2015;
创建日期:2016-02-09
修改日期:2016-02-13
一、在AssemblyInfo.cs文件中配置应用程序清单
前面的章节我们说过,除了在AndroidManifest.xml文件中配置应用程序清单外,还可以在AssemblyInfo.cs文件中配置应用程序清单。
实际上,用C#编写Android应用程序时,可以完全不去考虑AndroidManifest.xml文件,这些内部处理的过程都让编译器替你去管理好了,反正最终生成的清单配置结果都是一样的。但是,带智能提示的配置方式要比你直接修改AndroidManifest.xml文件方便得多。
当然,这只是VS2015编译器给你提供的智能配置Android应用程序清单的另一种途径而已,也是C#编程常用的配置清单的方式。不过,如果你仍然习惯于像Java编程那样在项目中直接修改AndroidManifest.xml文件,而且也能容忍配置不一致时导致的莫名其妙的错误,也可以继续使用直接修改AndroidManifest.xml文件的办法,反正Java编程人员都已经习惯改过来改过去那种最原始的配置办法了,也对这种方式麻木了,可对C#编程来说,这种弱智的到处让编程人员自己去配置这配置那的实现思路实在是让人无法容忍。
这一节先简单演示一下如何在AssemblyInfo.cs文件中配置应用程序清单,这种方式既能让你利用智能提示很直观地看到到底有哪些可配置的选项,也能让你一眼就能看出配置是否有错。
二、创建更灵活些的自定义适配器
在前面章节的主界面中,我们使用的都是最简单的办法:直接创建一个字符串数组来列出示例导航。这种方式虽然简单,但却是最没有灵活性的笨办法。
这一节我们将学习如何让主界面显示的内容比上一章介绍的办法更灵活些(为了让你理解的深刻些,这一章先不用最优的办法,等下一章再介绍比这个更好的办法)。
1、在哪里定义适配器
一般情况下,适配器针对哪个类,就在包含这个类的文件中去定义它。例如,要编写针对MainActivity类中使用的适配器,就在MainActivity.cs文件中去定义它。
2、创建自己的列表项类
到底创建那些列表项,就看你的需要了。下面的代码演示了如何创建MyItems类:
public class MyItems
{
public string Title { get; set; }
public string Desc { get; set; }
}
3、创建自定义适配器的技巧
一旦有了自己的列表项(MyItems类),就可以在自定义的适配器中去指定它了。
下面的截图演示了如何快速创建自定义适配器:

单击黄色灯泡右方的小三角符号,在弹出的下拉框中选择【实现抽象类】,它就会自动添加所有需要重写的方法,不需要你自己去一个一个地敲代码。
注意:这里提示的“不实现……”实际上应该是“没有实现…..”,这是中文翻译的问题,自己明白它的实际含义就行了。
三、本章示例主界面
本章示例的所有源程序都在ch07demos项目中。
项目名:ch07demos
项目模板:Blank App(Android)
1、运行截图
主界面运行截图如下:

2、修改发布的目标版本
在解决方案资源管理器中,鼠标右击【ch07demos】项目,选择【属性】,将【Compile using Android version】的选项改为“API Level 19”,如下图所示:

3、修改清单文件(AssemblyInfo.cs)
在该文件中添加应用程序级别的主题以及其他配置。添加后的AssemblyInfo.cs的完整内容如下:
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Android.App; [assembly: AssemblyTitle("ch07demos")]
[assembly: AssemblyDescription("布局控件的基本用法")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("毛毛雨的博客乐园(http://www.cnblogs/rainmj/)")]
[assembly: AssemblyProduct("rainmjAndroidDemos")]
[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("zh-CN")]
[assembly: ComVisible(false)] [assembly:Application(Theme = "@android:style/Theme.DeviceDefault.Light")] [assembly: AssemblyVersion("1.0.*")]
4、修改主界面(Main.axml)
将Main.axml改为下面的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView1" />
</LinearLayout>
5、修改主活动文件(MainActivity.cs)
本章示例全部完成后MainActivity.cs的代码如下:
using Android.App;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.Collections.Generic;
using ch07demos.SrcDemos; namespace ch07demos
{
[Activity(Label = "ch07demos", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
List<MyItems> items = new List<MyItems>()
{
new MyItems {Title="Demo01--LinearLayout",Desc="演示线性布局的基本用法" },
new MyItems {Title="Demo02--GridLayout",Desc="演示网格布局的基本用法" },
new MyItems {Title="Demo03--TableLayout",Desc="演示表格布局的基本用法" },
new MyItems {Title="Demo04--RelativeLayout",Desc="演示相对布局的基本用法" },
new MyItems {Title="Demo05--FrameLayout",Desc="演示帧布局的基本用法" }
};
ListView listView1 = FindViewById<ListView>(Resource.Id.listView1);
listView1.Adapter = new MyAdapter(this, items);
listView1.ItemClick += (s, e) =>
{
int index = e.Position + ;
switch (index)
{
case :
StartActivity(typeof(Demo01LinearLayout));
break;
case :
StartActivity(typeof(Demo02GridLayout));
break;
case :
StartActivity(typeof(Demo03TableLayout));
break;
case :
StartActivity(typeof(Demo04RelativeLayout));
break;
case :
StartActivity(typeof(Demo05FrameLayout));
break;
}
};
}
} public class MyItems
{
public string Title { get; set; }
public string Desc { get; set; }
} public class MyAdapter : BaseAdapter<MyItems>
{
private List<MyItems> items;
private Activity context; public override int Count
{
get
{
return items.Count;
}
} public override MyItems this[int position]
{
get
{
return items[position];
}
} public MyAdapter(Activity context, List<MyItems> items)
{
this.context = context;
this.items = items;
} public override long GetItemId(int position)
{
return position;
} public override View GetView(int position, View convertView, ViewGroup parent)
{
var item = items[position];
View view = null;
view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItem2, null);
view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Title;
view.FindViewById<TextView>(Android.Resource.Id.Text2).Text = item.Desc;
return view;
}
}
}
OK,这一章的第1讲就到这里了。
【Android】7.0 第7章 简单适配器和布局--本章示例主界面的更多相关文章
- 【Android】19.0 第19章 前面章节的代码优化及本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-03-05 一.简介 这一章我们介绍"共享存储和内容提供程序"的基本用法. 二.先优化一下前面章节例子的代码 在前面 ...
- 【Android】13.0 第13章 创建和访问SQLite数据库—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 Android 内置了三种数据存取方式:SQLite数据库.文件.SharedPreferences. 这一章我们 ...
- 【Android】16.0 第16章 自定义服务和系统服务—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-03-01 一.简介 本章主要演示Started Service.带Intent过滤器的Started Service.IntentSe ...
- 【Android】14.0 第14章 内部存储与外部SD卡存储—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 Android使用的文件系统是基于Linux的文件系统,在Android应用程序中,开发人员既可以建立和访问程序自 ...
- 【Android】17.0 第17章 服务绑定—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-03-03 一.简介 通过服务绑定(Bound Services),可以轻松实现后台服务与界面(UI)的交互. 二.本章示例主界面 1. ...
- 【Android】12.0 第12章 Intent及其过滤器—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 这一章我们主要学习Intent的基本用法,并通过例子演示如下功能: 如何启动另一个界面: 如何获取另一个界面的返回 ...
- 【Android】11.0 第11章 活动和片段--本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-21 一.简介 这一章我们学习activity和fragment,深入理解activity和fragment的生命周期是如何工作的 ...
- 【Android】15.0 第15章 广播和通知—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-28 一.简介 广播(Broadcast):其功能类似于收音机的广播,你只要调到那个台(只要在接收的类中注册了要接收的广播),就能 ...
- 【Android】第18章 位置服务和手机定位—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-03-04 一.简介 目前,基于位置的服务发展迅速,已涉及到商务.医疗.定位.追踪.敏感区域警告.工作和生活等各个方面.定位服务融合了G ...
随机推荐
- 设置MAC 下 Vim 语法高亮显示
一:终端进入 cd /usr/share/vim/ 二: sudo vim vimrc 三:添加 syntax enablesyntax on 四:保存退出
- 栈溢出笔记1.3 准备Shellcode
经过1.1和1.2节的讲述,我们已经知道了怎样更改EIP的值. 程序运行函数之后将跳转到我们设定的位置開始运行,因此,我们须要准备一个自己的程序,接手后面的工作.这是一个什么样的程序?是一个C语言编写 ...
- Swift2.1keyword @noescape介绍
@noescape优化编译器编译,swift 2.1引入. 函数假设有一个一个參数是closure的话,能够在前面加一个关键字@noescape表示在函数return前closure生命周期结束,能够 ...
- vb sendmessage 详解2
首先我们了解一下Windows的消息机制.Windows是一个消息驱动式系统,Windows消息提供应用程序与应用程序之间,应用程序与Windows系统之间进行通信的手段.举个例子,打开记事本程序,该 ...
- 〖Ruby〗Ruby运算符/优先级
优先级 能否重写 运行符 描述 最高 Y [] []= 数组下标 数组元素赋值 Y ** 冥乘 Y ! ~ + - 非 位非 一元加 负号 Y * / % 乘 除 模 Y + - 加 减 Y > ...
- C++开发WPF,Step by Step
示例代码 使用C++来开发WPF,主要是如何在MFC(Win32)的窗口中Host WPF的Page.下面我就做个详细的介绍. 一.创建工程, 由于MFC的Wizard会生成很多用不到的代码,所以我准 ...
- CSS3制作Freebie标签
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- Android网络开发之HttpURLConnection
http是一个可靠的传输,建立在TCP/IP连接之上,缺省端口是80,其他端口号也可以用.Android可以用HttpURLConnection或HttpClient接口来开发http程序. http ...
- 微信小程序:bindtap方法传参
1.wxml <view bindtap="pay_again" data-name="{{orderList.jid}}" data-fee=" ...
- HDUOJ-----(1251)统计难题
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Total Subm ...