安卓开发复习笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)

记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost

之前2篇文章的链接:

安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航)

安卓开发复习笔记——TabHost组件(二)(实现底部菜单导航)

关于Fragment类在之前的安卓开发复习笔记——Fragment+ViewPager组件(高仿微信界面)也介绍过,这里就不再重复阐述了。

国际惯例,先来张效果图:

下面直接上代码了,注释很全,看过我前2篇文章的朋友,肯定秒懂的,哈哈~

activity_main.xml(主布局文件)

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:orientation="vertical" >
 6
 7     <!-- 存放主要页面内容 -->
 8
 9     <FrameLayout
10         android:id="@+id/maincontent"
11         android:layout_width="fill_parent"
12         android:layout_height="0dp"
13         android:layout_weight="1" >
14     </FrameLayout>
15
16     <!-- 底层菜单 -->
17
18     <android.support.v4.app.FragmentTabHost
19         android:id="@android:id/tabhost"
20         android:layout_width="fill_parent"
21         android:layout_height="wrap_content"
22         android:background="@drawable/maintab_toolbar_bg" >
23
24         <FrameLayout
25             android:id="@android:id/tabcontent"
26             android:layout_width="0dp"
27             android:layout_height="0dp"
28             android:layout_weight="0" >
29         </FrameLayout>
30     </android.support.v4.app.FragmentTabHost>
31
32 </LinearLayout>

fragment.xml(由于只有文字不同,这里只给出一个)

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5  >
 6
 7
 8     <TextView
 9         android:id="@+id/text"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:layout_centerInParent="true"
13         android:text="我是第一个Fragment"
14         android:textSize="20dp"
15         />
16
17
18 </RelativeLayout>

tabcontent.xml(具体底部菜单详细布局)

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="wrap_content"
 4     android:layout_height="wrap_content"
 5     android:gravity="center_horizontal"
 6     android:orientation="vertical" >
 7
 8     <ImageView
 9         android:id="@+id/image"
10         android:layout_height="wrap_content"
11         android:layout_width="wrap_content"
12         />
13     <TextView
14         android:id="@+id/text"
15         android:padding="2dp"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:textColor="@android:color/white"
19         />
20
21
22 </LinearLayout>

bt_selector.xml(底部菜单点击背景)

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3
4     <item android:drawable="@drawable/home_btn_bg" android:state_pressed="true"></item>
5     <item android:drawable="@drawable/home_btn_bg" android:state_selected="true"></item>
6
7 </selector>

bt_home_selector.xml(底部菜单按钮效果)

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3
4     <item android:drawable="@drawable/icon_home_sel" android:state_selected="true"></item>
5     <item android:drawable="@drawable/icon_home_nor"></item>
6
7 </selector>

FragmentPage1-FragmentPage5.java

 1 package com.example.newtabhosttest;
 2
 3 import android.os.Bundle;
 4 import android.support.annotation.Nullable;
 5 import android.support.v4.app.Fragment;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9
10 public class FragmentPage1 extends Fragment{
11         @Override
12         public View onCreateView(LayoutInflater inflater,
13                 @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
14             return inflater.inflate(R.layout.fragment1, null);
15         }
16
17 }

MainActivity.java(主代码)

 1 package com.example.newtabhosttest;
 2
 3 import android.os.Bundle;
 4 import android.support.v4.app.FragmentActivity;
 5 import android.support.v4.app.FragmentTabHost;
 6 import android.view.View;
 7 import android.widget.ImageView;
 8 import android.widget.TabHost.TabSpec;
 9 import android.widget.TextView;
10
11 public class MainActivity extends FragmentActivity {
12
13     private FragmentTabHost fragmentTabHost;
14     private String texts[] = { "首页", "消息", "好友", "广场", "更多" };
15     private int imageButton[] = { R.drawable.bt_home_selector,
16             R.drawable.bt_message_selector, R.drawable.bt_selfinfo_selector,R.drawable.bt_square_selector ,R.drawable.bt_more_selector};
17      private Class fragmentArray[] = {FragmentPage1.class,FragmentPage2.class,FragmentPage3.class,FragmentPage4.class,FragmentPage5.class};
18
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23
24         // 实例化tabhost
25         fragmentTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
26         fragmentTabHost.setup(this, getSupportFragmentManager(),
27                 R.id.maincontent);
28
29         for (int i = 0; i < texts.length; i++) {
30             TabSpec spec=fragmentTabHost.newTabSpec(texts[i]).setIndicator(getView(i));
31
32             fragmentTabHost.addTab(spec, fragmentArray[i], null);
33
34             //设置背景(必须在addTab之后,由于需要子节点(底部菜单按钮)否则会出现空指针异常)
35             fragmentTabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.bt_selector);
36         }
37
38     }
39
40     private View getView(int i) {
41         //取得布局实例
42         View view=View.inflate(MainActivity.this, R.layout.tabcontent, null);
43
44         //取得布局对象
45         ImageView imageView=(ImageView) view.findViewById(R.id.image);
46         TextView textView=(TextView) view.findViewById(R.id.text);
47
48         //设置图标
49         imageView.setImageResource(imageButton[i]);
50         //设置标题
51         textView.setText(texts[i]);
52         return view;
53     }
54
55 }

到这里代码就结束了,要是有哪里疑惑的朋友可以给我留言,如果觉得文章对您有用的话,请给个赞,谢谢支持!^_^

时间: 09-20

安卓开发复习笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)的相关文章

转-Fragment+FragmentTabHost组件(实现新浪微博底部菜单)

http://www.cnblogs.com/lichenwei/p/3985121.html 记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost 之前2篇文章的链接: 安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航) 安卓开发复习笔记——TabHost组件(二)(实现底部菜单导航) 关于Fragment类在之前的安卓开发复习笔记——Fragment+Vie

安卓开发复习笔记——Fragment+ViewPager组件(高仿微信界面)

什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再重复. 什么是Fragment? Fragment是Android3.0后新增的概念,Fragment名为碎片,不过却和Activity十分相似,具有自己的生命周期,它是用来描述一些行为或一部分用户界面在一个Activity中,我们可以合并多个Fragment在一个单独的activity中建立多个UI面板,或

安卓开发复习笔记——TabHost组件(实现底部菜单导航)

安卓开发复习笔记——TabHost组件(实现底部菜单导航) 4 来源:cnblog    阅读:1048   时间:2014-09-16 什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用windows操作系统的时候,经常见到如图所示的图形界面. TabHost选项卡,说到这个组件,不得不先说一件事情,翻翻谷歌提供给我们的API,我们可以发现这样的一段话: 它告诉我们,这个组件在安卓4.0之后已经被废弃了,建议我们新的程序应该使用Fragment组件

安卓开发复习笔记——WebView组件

我们专业方向本是JAVA Web,这学期突然来了个手机App开发的课设,对于安卓这块,之前自学过一段时间,有些东西太久没用已经淡忘了 准备随笔记录些复习笔记,也当做温故知新吧~ 1.什么是WebView? WebView(网络视图)能加载显示网页,可以将其视为一个浏览器,它使用了WebKit渲染引擎加载显示网页. 废话不多说,直接上代码 1.需要在xml布局文件中声明WebView组件 1 <WebView 2 android:id="@+id/webview" 3 androi

安卓开发复习笔记——ViewPager组件(仿微信引导界面&gt;)

这2天事情比较多,都没时间更新博客,趁周末,继续继续~ 今天来讲个比较新潮的组件——ViewPager 什么是ViewPager? ViewPager是安卓3.0之后提供的新特性,继承自ViewGroup,专门用以实现左右滑动切换View的效果. 如果想向下兼容就必须要android-support-v4.jar这个包的支持,这是一个来自google提供的一个附加包. 通俗点来讲,就是现在市面上大多数app,安装完第一次打开软件会出现的一个左右滑动的引导界面. 先来看下效果图:     这是一个

安卓开发复习笔记——GridView组件

1.什么是GridView? GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的. 2.正文 GridView的用法很多,网上介绍最多的方法就是自己实现一个ImageAdapter继承BaseAdapter,再供GridView使用,太多的东西我就不再重复去写,这次记录点不一样的用法. 先看下效果图:(点击应用图标以Toast的方式显示信息) 首先先说下GridView常用的XML属性: 属性名称 描述

安卓开发复习笔记——Gallery组件+ImageSwitcher组件

什么是Gallery? Gallery是一个水平的列表选择框,它允许用户通过拖动来查看上一个.下一个列表选项. 下图是今天要实现的最终效果: 利用Gallery组件实现的一个横向显示图像列表,可以通过左.右滑动屏幕来切换图像,并加上ImageSwitcher实现一个大图片预览功能. 1.一步一步来吧,首先先解决下上半部分(图像导航) 先来看下效果图,下图是利用Gallery组件实现的一个横向显示图像列表,可以通过左.右滑动屏幕来切换图像.   直接上代码,注释很全. MainActivity.j

安卓开发复习笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)

菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 菜单的实现方式有2种:一种是通过布局文件xml生成菜单,另一种是通过代码生成. 三种菜单内容有点多,不过大体相似,一次性讲完吧,本人偏好代码动态生成,下面就以代码为例. 1.选项菜单(OptionsMenu) 先来看下选项菜单的效果图:   在一个Activity界面中点击手机Menu键,在屏幕下方弹出的菜单

【Android UI设计与开发】第08期:底部菜单栏(三)Fragment+FragmentTabHost实现仿新浪微博底部菜单栏

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9016223       在上一篇文章中,我们花了大量的篇幅来讲解Fragment这个新引进类的使用,目的就是为了让大家能够牢牢的掌握它的使用方法,以便读者在今后的开发中能够熟练的使用它. 一.实现效果图   二.项目工程结构 三.详细代码编写 1.主tab布局界面,main_tab_layout: <?xml version="1.0" encoding=&