一:先看一下框架搭建后的效果图

     ,

二:框架结构

  (1)底部导航栏采用的是: MainActivity(主框架),

MsgFragment(首页),

HistoryFragment(历史清单含顶部导航栏),

MineFragment(我的)。

  (2)自定义标题栏(自定义toolbar)

三:底部导航栏的实现

主要代码:

MainActivity:

   //定义底部文字
private final int[] TAB_TITLES = new int[]{
R.string.menu_msg, R.string.menu_history, R.string.menu_mine
};
//定义底部图标
private final int[] TAB_IMGS = new int[]{
R.drawable.tab_main_msg, R.drawable.tab_main_history, R.drawable.tab_main_mine
};
//黄油刀 找到控件
@BindView(R.id.view_pager)
ViewPager viewPager;
@BindView(R.id.tab_layout)
TabLayout tabLayout; //定义适配器
private PagerAdapter pagerAdapter; //初始化页卡
private void initPager() {
pagerAdapter = new MainFragmentAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition(), false);
} @Override
public void onTabUnselected(TabLayout.Tab tab) { } @Override
public void onTabReselected(TabLayout.Tab tab) { }
});
} //设置页卡显示效果
private void setTabs(TabLayout tabLayout, LayoutInflater inflater, int[] tabTitles, int[] tabImgs) {
for (int i = 0; i < tabImgs.length; i++) {
TabLayout.Tab tab = tabLayout.newTab();
View view = inflater.inflate(R.layout.item_main_menu, null);
//使用自定义视图,便于修改
tab.setCustomView(view);
TextView tvTitle = (TextView) view.findViewById(R.id.txt_tab);
tvTitle.setText(tabTitles[i]);
ImageView imgTab = (ImageView) view.findViewById(R.id.img_tab);
imgTab.setImageResource(tabImgs[i]);
tabLayout.addTab(tab);
}
}

MainActivity.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<com.example.myapplication.mytoobar.CustomToolbar
android:id="@+id/bar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/line_gray"
android:layout_alignBottom="@+id/bar1"></View>
</RelativeLayout>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" /> <View
android:layout_width="match_parent"
android:layout_height="0.5dip"
android:background="@color/line_gray" /> <android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="100dp"
app:tabIndicatorHeight="0dip" /> </LinearLayout>

Adapter:

  @Override
public Fragment getItem(int i) {
Fragment fragment = null;
switch (i) {
case 0:
fragment = new MsgFragment();
break;
case 1:
fragment = new HistoryFragment();
break;
case 2:
fragment = new MineFragment();
break;
default:
break;
}
return fragment; } @Override
public int getCount() {
return 3;
}

四:自定义标题栏的实现

关键代码:

toolbar.xml:

  <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"
android:layout_gravity="left"
/>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SubwayGo"
android:textColor="#000000"
android:layout_gravity="center"
android:singleLine="true"
android:visibility="visible"
android:textSize="30dp"
android:fontFamily="cursive"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:textColor="@color/colorPrimaryDark"
android:text="设置"
android:gravity="center"
android:layout_gravity="right"
android:visibility="visible"
/>
 public class CustomToolbar extends Toolbar {

    public CustomToolbar(Context context){
this(context,null);
}
public CustomToolbar(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CustomToolbar(Context context,AttributeSet attrs,int defStyleAttr){
super(context,attrs,defStyleAttr);
inflate(context, R.layout.toolbar,this);
}
}

五:总结一下,以上代码都是关键代码,至于点击事件的设置,页面数据的传递等等比较基础,就不附上了。下一篇会对线路的最优路径进行选择。

Android项目开发之--------地铁时光机(一,搭建主框架)的更多相关文章

  1. Android项目开发全程(四)-- 将网络返回的json字符串轻松转换成listview列表

    前面几篇博文介绍了从项目搭建到获取网络字符串,对一个项目的前期整体工作进行了详细的介绍,本篇接着上篇介绍一下怎么样优雅将网络返回的json字符串轻松转换成listview列表. 先上图,看一下效果. ...

  2. Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的

    在前两篇博文中已经做了铺垫,下面咱们就可以用前面介绍过的内容开始做一个小项目了(项目中会用到Afinal框架,不会用Afinal的童鞋可以先看一下上一篇博文),正所谓麻雀虽小,五脏俱全,这在里我会尽量 ...

  3. Android项目开发全程(二)--Afinal用法简单介绍

    本篇博文接上篇的<Android项目开发全程(一)--创建工程>,主要介绍一下在本项目中用到的一个很重要的框架-Afinal,由于本系列博文重点是项目开发全程,所以在这里就先介绍一下本项目 ...

  4. Android项目开发填坑记-Fragment的onBackPressed

    Github版 CSDN版 知识背景 Fragment在当前的Android开发中,有两种引用方式,一个是 Android 3.0 时加入的,一个是supportV4包中的.这里简称为Fragment ...

  5. Android项目开发填坑记-Fragment的onAttach

    背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...

  6. Android项目开发填坑记-so文件引发的攻坚战

    故事的最初 我负责的项目A要求有播放在线视频的功能,当时从别人的聊天记录的一瞥中发现百度有相关的SDK,当时找到的是Baidu-T5Player-SDK-Android-1.4s,项目中Demo的so ...

  7. C#-Xamarin的Android项目开发(二)——控件应用

    相信我,这不是一篇吐槽文章.... 基础控件 Android的控件和控件样式非常特别,它是一种内联特别高的设计模式,换句话说,它是非常烂的设计.... 但在这种特别的关系里还是有一定的规律的,下面我们 ...

  8. C#-Xamarin的Android项目开发(三)——发布、部署、打包

    前言 部署,通常的情况下,它其实也是项目开发的一个难点. 为什么这么说呢?因为,它不是代码开发,所以很多开发者本能的拒绝学习它. 并且一个项目配置好一次以后,部署的步骤和部署的人通常很固定,所以大部分 ...

  9. Android项目开发一

    Android项目开发一   进度计划 1.第一周 开源中国注册账号:http://my.oschina.net/u/2511208,并上传Android HelloWorld程序代码 搭建Andro ...

随机推荐

  1. [演示示例程序]Objective-C受委托的设计模式(牛仔女孩)

    今天整理电脑打开一次自我Objective-C当编写一个实践设计模式委托一个小程序,在po快来分享.也复习一下OC中的托付. Objective-C中的托付设计模式是和协议分不开的. 协议呢.就是使用 ...

  2. Dictionary(数据字典)

    数据字典:Dictionary对象用于在结对的名称/值中存储信息(等同于键和项目),其可作为传参使用. C# Dictionary字典类的使用方法 //定义字典 Dictionary<strin ...

  3. Android 光标位置设置

    EditText edit =(EditText) findViewById(R.id.etTest); 1.设置光标在EditText中的指定位置 edit.setSelection(1); 需要注 ...

  4. TCP协议是如何保证可靠传输的【经典】

    参考:http://blog.csdn.net/cmm0401/article/details/77878998 从特点上我们已经知道,TCP 是可靠的但传输速度慢 ,UDP 是不可靠的但传输速度快. ...

  5. Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来

    首先题外话,今天早上起床的时候,手滑一下把我的手机甩了出去,结果陪伴我两年半的摩托罗拉里程碑一代就这么安息了,于是我今天决定怒更一记,纪念我死去的爱机. 如果你是网购达人,你的手机上一定少不了淘宝客户 ...

  6. 3 Task中的一些枚举 创建时候的、continue时候的

    创建时常用的枚举: None.PreferFairness.LongRunning.AttacthedToParent.DenyChildAttach.HideScheduler AttacthedT ...

  7. WPF,SilverLight中直线的样式示例

    原文:WPF,SilverLight中直线的样式示例 XAML代码:// LineStyle.xaml<Viewbox Width="600" Height="50 ...

  8. WPF 左键单击弹出菜单 ContextMenu

    原文:WPF 左键单击弹出菜单 ContextMenu WPF中的ContextMenu在XAML中可直接做出来,但是仅限于右键弹出菜单,如果需要添加左键弹出功能,只需要在事件中添加Click事件 X ...

  9. 推荐几个js的好链接

    JavaScript 之美 其一:http://fxck.it/post/72326363595 其二:http://fxck.it/post/73513189448

  10. C#控制台关闭之前做一些操作

    using System; using System.Runtime.InteropServices; class Program { static void Main(string[] args) ...