1.废话背景介绍 

在Build 2016开发者大会上,微软宣布,Xamarin将被整合进所有版本的Visual Studio之中。

这也就是说,Xamarin将免费提供给所有购买了Visual Studio的开发者使用。这样一来,开发者就能利用 .NET和C#工具,开发Android和iOS应用程序了。
重要的是,Xamarin与Visual Studio的整合没有任何限制。尽管未被收购前,Xamarin也提供免费版给开发者使用,但该免费版只支持小型可执行程序。想要在Xamarin上开发大型可执行程序的话,开发者还是得先花钱买授权。
但现在情况不同了,开发者除了无法自由使用Xamarin部分面向企业客户的功能,其它所有工具都可免费使用。
重要的是,现在Xamarin Studio还支持在OS X平台上使用。
此外微软表示,几周后将完全开放Xamarin SDK。这意味着Xamarin的运行环境、库文件界面和编码工具,将被公布在Github上,由 .NET Foundation进行管理。与此同时,供开发者构建用户界面的跨平台工具包Xamarin Forms也将开源。

前面都是科普废话,上正文.

2.环境安装 

抱着试一试的心态,更新了VS 2015 Updata2, 因为以前就玩过Xamarin,注册了帐号发现升级后还是使用过去,很郁闷 以为微软忽悠我们呢.

试着找找 无意中在Tools --> Options  --> Other 里面看到 Xamarin for Visual Studio Updatas

咦这是什么鬼?

点击 Check Now 试试 如图:

等到一段时间, 墙的威力太大,有必要的话请FQ更新.另外Android SDK NDK的安装(什么,你知道怎么安装,请baidu一下)也请FQ,下载镜像可以设置为东软的镜像 mirrors.neusoft.edu.cn

如图:

这些下载更新快多了.

环境这些准备好了.

我们来回归正题.

3.Android底部导航条

终于可以写代码了,开始不了解Xamarin Android的原理,还导出找教程,尼玛最后才知道不管Android还是IOS Xamarin都可以直接使用原生的界面布局加C#语法编译打包.这下简单了找个原生的例子直接使用,略加翻译Java-->C#即可,Java C#相似度极高. 聪明的你们肯定一看就会.以下实例本人均翻译至Java的实例.

简单说说原理,主要使用TabActivity TabHost Intent. 你问我他们分别是干什么的? 呃!~~~ 这个可以将一本书了, 用了你就知道了.

现在 TabActivity据说已经过时 Fragment已取代了他.有兴趣的朋友可以试试,找个例子改改.

TabActivity在API 13(Android 3.2)被标记为过期,需要使用Fragment来实现,Fragment是Android 3.0引入的一个概念,主要就是为了适应各种不同的屏

先上张效果图,这是最终要实现的样子:

开始建工程

这个大家都会吧,不多说.

创建Maintabs.axml

xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0.0dip"
            android:layout_weight="1.0" />
        <TabWidget
            android:id="@android:id/tabs"
            android:visibility="gone"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.0" />
        <RadioGroup
            android:gravity="center_vertical"
            android:layout_gravity="bottom"
            android:orientation="horizontal"
            android:id="@+id/main_radio"
            android:background="@drawable/maintab_toolbar_bg"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            <RadioButton
                android:id="@+id/radio_button0"
                android:layout_marginTop="2.0dip"
                android:text="@string/main_home"
                android:drawableTop="@drawable/icon_1_n"
                style="@style/main_tab_bottom" />
            <RadioButton
                android:id="@+id/radio_button1"
                android:layout_marginTop="2.0dip"
                android:text="@string/main_news"
                android:drawableTop="@drawable/icon_2_n"
                style="@style/main_tab_bottom" />
            <RadioButton
                android:id="@+id/radio_button2"
                android:layout_marginTop="2.0dip"
                android:text="@string/main_manage_date"
                android:drawableTop="@drawable/icon_3_n"
                style="@style/main_tab_bottom" />
            <RadioButton
                android:id="@+id/radio_button3"
                android:layout_marginTop="2.0dip"
                android:text="@string/main_friends"
                android:drawableTop="@drawable/icon_4_n"
                style="@style/main_tab_bottom" />
            <RadioButton
                android:id="@+id/radio_button4"
                android:layout_marginTop="2.0dip"
                android:text="@string/more"
                android:drawableTop="@drawable/icon_5_n"
                style="@style/main_tab_bottom" />
        RadioGroup>
    LinearLayout>

TabHost>

修改 MainActivity.cs

1 using System;
2 using Android.App;
3 using Android.Content;
4 using Android.Runtime;
5 using Android.Views;
6 using Android.Widget;
7 using Android.OS;

9 namespace MyAppTest
10 {
11     [Activity(Label = "MyAppTest", MainLauncher = true, Icon = "@drawable/icon",Theme = "@android:style/Theme.DeviceDefault.NoActionBar")]
12     public class MainTabActivity : TabActivity, CompoundButton.IOnCheckedChangeListener
13     {
14         private TabHost mTabHost;
15         private Intent mAIntent;
16         private Intent mBIntent;
17         private Intent mCIntent;
18         private Intent mDIntent;
19         private Intent mEIntent;
20         
21         protected override void OnCreate(Bundle bundle)
22         {
23             base.OnCreate(bundle);
24             RequestWindowFeature(WindowFeatures.NoTitle);
25             // Set our view from the "main" layout resource
26             SetContentView(Resource.Layout.Maintabs);
27 
28             this.mAIntent = new Intent(this, typeof (AActivity));
29             this.mBIntent = new Intent(this, typeof (BActivity));
30             this.mCIntent = new Intent(this, typeof (CActivity));
31             this.mDIntent = new Intent(this, typeof (DActivity));
32             this.mEIntent = new Intent(this, typeof (EActivity));
33 
34             ((RadioButton)FindViewById(Resource.Id.radio_button0)).SetOnCheckedChangeListener(this);
35             ((RadioButton)FindViewById(Resource.Id.radio_button1)).SetOnCheckedChangeListener(this);
36             ((RadioButton)FindViewById(Resource.Id.radio_button2)).SetOnCheckedChangeListener(this);
37             ((RadioButton)FindViewById(Resource.Id.radio_button3)).SetOnCheckedChangeListener(this);
38             ((RadioButton)FindViewById(Resource.Id.radio_button4)).SetOnCheckedChangeListener(this);
39 
40 
41             SetupIntent();
42         }
43 
44         public void OnCheckedChanged(CompoundButton buttonView, bool isChecked)
45         {
46             if (isChecked)
47             {
48                 switch (buttonView.Id)
49                 {
50                     case Resource.Id.radio_button0:
51                         this.mTabHost.SetCurrentTabByTag("A_TAB");
52                         break;
53                     case Resource.Id.radio_button1:
54                         this.mTabHost.SetCurrentTabByTag("B_TAB");
55                         break;
56                     case Resource.Id.radio_button2:
57                         this.mTabHost.SetCurrentTabByTag("C_TAB");
58                         break;
59                     case Resource.Id.radio_button3:
60                         this.mTabHost.SetCurrentTabByTag("D_TAB");
61                         break;
62                     case Resource.Id.radio_button4:
63                         this.mTabHost.SetCurrentTabByTag("MORE_TAB");
64                         break;
65                 }
66             }
67         }
68 
69         private void SetupIntent()
70         {
71             this.mTabHost = this.TabHost;
72             TabHost localTabHost = this.mTabHost;
73 
74             localTabHost.AddTab(BuildTabSpec("A_TAB", Resource.String.main_home,Resource.Drawable.icon_1_n, this.mAIntent));
75 
76             localTabHost.AddTab(BuildTabSpec("B_TAB", Resource.String.main_news,
77                 Resource.Drawable.icon_2_n, this.mBIntent));
78 
79             localTabHost.AddTab(BuildTabSpec("C_TAB",
80                 Resource.String.main_manage_date, Resource.Drawable.icon_3_n,
81                 this.mCIntent));
82 
83             localTabHost.AddTab(BuildTabSpec("D_TAB", Resource.String.main_friends,
84                 Resource.Drawable.icon_4_n, this.mDIntent));
85 
86             localTabHost.AddTab(BuildTabSpec("MORE_TAB", Resource.String.more,
87                 Resource.Drawable.icon_5_n, this.mEIntent));
88 
89         }
90 
91         private TabHost.TabSpec BuildTabSpec(string tag, int resLabel, int resIcon, Intent content)
92         {
93             return this.mTabHost.NewTabSpec(tag).SetIndicator(GetString(resLabel),
94                 Resources.GetDrawable(resIcon)).SetContent(content);
95         }
96     }

97 }

注意红色部分,与自动创建的不同.

创建其他 Activity.cs / AActivity BActivity CActivity DActivity EActivity

using System;

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace MyAppTest
{
    [Activity(Label = "AActivity", Icon = "@drawable/icon", Theme = "@android:style/Theme.DeviceDefault.NoActionBar")]
    public class AActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            RequestWindowFeature(WindowFeatures.NoTitle);

TextView tv = new TextView(this);
            tv.SetText("This is A Activity!", TextView.BufferType.Normal);
            tv.Gravity = GravityFlags.Center;
            SetContentView(tv);
        }
    }
}

涉及到的资源这里没有列出,请参考源码.

 4.真机调试

代码写完了,该编译以下了, 看看是否有错, 编译顺利通过, 插上真机(我这里有个买车险送的 200块的 Android平板 准备扔了的,试了下很真可以调试程序),

要VS直接调试的话,需要VS是以管理员方式启动的, 查上设备后你会看到:

设备显示在调试的位置,直接F5就可以了. 什么?无图无真相?

运行效果:

5.打包 

调试完了,该打包发布了是吧?

等等 打包(Export Android Package(.apk))怎么是灰色的?

别着急,大微软肯定不会忽悠你.

原来你需要把编译 模式选择为 Release,默认的Debug是不能打包的. 看这里. 看这里.

打包完成:

你问我卡不卡呀? 我这不到200块钱的白送的pad都可以流畅的跑.

结束了,该上码了:

本文源码下载:

http://files.cnblogs.com/files/crazybird/MyAppTest.zip

出处:http://www.cnblogs.com/crazybird/articles/5373223.html

转载于:https://www.cnblogs.com/mq0036/p/7265928.html

VS 2015 开发Android底部导航条----[实例代码,多图]相关推荐

  1. android底部导航栏svg,vue开发移动端底部导航条功能

    效果图 src/app.vue 头部导航 内容区域 import Tabbar from 'components/tabbar'; export default { name: 'App', comp ...

  2. android导航条高度修改,Android中修改TabLayout底部导航条Indicator长短的方法

    前言 对于Tablayout相信大家都不陌生,在开发中使用的应该很频繁了,但是底部导航条长短是固定死的,需要自己来改动长短,找了半天没找着方法,看了下官方建议,可以通过映射来修改自己想要的长短,其实也 ...

  3. Android 获取底部导航条高度

    获取设备底部导航条高度 /*** 获取底部导航条高度*/ private fun getNavigationBarHeight(): Int {if (!isNavigationBarShow()) ...

  4. h5 android底部导航栏,安卓 微信端h5 页面 增加 底部导航栏总结

    Aphorism grow in errors overview 最近在写一个 移动端的 jsp 项目, 应项目需求须在安卓机器上实现一个 ios 微信h5页面 底部的 导航条 想到的实现方案: 通过 ...

  5. android fragment 底部菜单栏,一句话搞定Android底部导航栏,一键绑定Fragment、ViewPager...

    现在大多数App都会用到底部导航栏,比如常见的聊天工具QQ.微信.购物App等等,有了底部导航栏,用户可以随时切换界面,查看不同的内容.它的实现方式也很多,以前大多使用TabHost来实现,但是现在我 ...

  6. 转载:Android底部导航栏,三种风格和实现

    原文出处 标题:Android底部导航栏,三种风格和实现 作者:阿飞__ 原文链接:Android底部导航栏,三种风格和实现_阿飞__的博客-CSDN博客_android导航栏 一.效果图展示 如果动 ...

  7. Android底部导航栏的三种风格实现

    一.效果图展示 如果动图没有动的话,也可以看下面这个静态图 以下挨个分析每个的实现,这里只做简单的效果展示,大家可以基于目前代码做二次开发. 二.BottomNavigationView 这是 Goo ...

  8. H5移动端div固定到底部实现底部导航条的几种方式

    H5移动端div固定到底部实现底部导航条的几种方式 需求: 需要把导航固定在底部?只能滑动内容,导航菜单固定不动的.效果如下: 这篇文章主要讲解三种实现方案,包括:fixed,absolute,以及c ...

  9. android 固定底部导航,如何设置android底部导航栏位置固定在android

    请帮我设置底部导航栏位置固定在底部, ,因为我在输入editText字段时遇到问题,底部导航栏向上移动并覆盖其他领域如何设置android底部导航栏位置固定在android 代码: xmlns:and ...

最新文章

  1. 如何为ccflow工作流引擎增加一个优先级PRI?
  2. 向设计师分享最新30款免费英文字体
  3. 【Flask项目】项目准备之-创建项目的APP对象
  4. 第二百六十一、二天 how can I坚持
  5. C++实现桶排序(附完整源码)
  6. web\app可视化图表设计模板,UI设计师临摹学习的帮手
  7. springmvc 响应封装_SpringMVC 封装返回结果对象
  8. AtomicInteger的CAS算法浅析
  9. Linux下mysql数据库的自动备份与还原 远程备份和本地备份
  10. 【UX/UI原型模板】中国地图元件库操作说明(省份+直辖市+自治区+行政特区详细地图)
  11. 欢乐颂 c语言编程代码,欢乐颂
  12. C# 版 EXE捆绑器
  13. 大学计算机技巧讲座新闻稿,计算机科学与技术名家讲座系列报道(王希胤)
  14. 微信小程序之关注公众号
  15. Android 屏幕旋转的处理
  16. ipad如何与计算机连接网络连接不上,平板电脑可以连接无线网络但上不了网如何解决...
  17. Iphone自带的邮箱 每次发完邮件在已发送里会显示重复发送了两封
  18. [转载] 真正可用的使用T5577卡复制4100卡_ID卡复制操作流程
  19. Coursera 学习记录:Tomorrow never knows?(实现日期加一的操作)
  20. Unity前项渲染和延迟渲染(二)

热门文章

  1. 应用中心最佳实践之——使用应用组完成多集群一键部署
  2. 为什么做技术 PM 这么难?
  3. 创意总监分享:我是如何做一款手游地图的
  4. 省带宽、耗电小,腾讯游戏学院专家解析手游渲染架构
  5. 数字类型的不正确转换漏洞
  6. Sqlserver高版本还原到低版本方法(Sqlserver2012到SqlServer2008 R2)
  7. CentOS下载及版本选择
  8. 对于analyze table使用
  9. MySQL Execution Plan--执行计划中的Type列
  10. C# GDI+ 画坐标(x,y)