http://www.cnblogs.com/lichenwei/p/3975095.html

上面文章《安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航)》中提到了利用自定义View(ImageView+TextView)来设置一个底部菜单的样式

这边再补充一种更为灵活的方法,可以把TabWidget隐藏,用(RadioGroup+RadioButton)来代替,并利用监听器的方式来实现监听点击点击跳转Activity。

在讲解之前,先补充几点:

1、当我们取得TabHost的实例对象时,我们可以用2种方法来设置当前界面内容(Activity)

查看下API,我们可以找到:

这2个方法,分别是利用页面标志符(int,起始页为0)和页面标签(String)来达到设置当前显示页

我们可以利用这2个方法,在对Radio进行监听点击时跳转到对应的页面。

2、在布局文件XML里,标签RadioGroup的子标签RadioButton里有几个需要注意的地方:

  1、android:button="@null"  这个是用来隐藏系统自身提供的单选按钮样式

  2、android:drawableTop="@drawable/tab_icon1"  这个是用来设置单选按钮的图标(系统默认提供在左边,这个可以把它设置在上面)

  3、android:drawablePadding="3dp"  这个是用来设置按钮图标与按钮标签所在的距离

3、需要把TabWidget设置为隐藏:android:visibility="gone"

为什么说采用这种方法更为灵活呢?

看过我上一篇文章的朋友应该都知道,在上一篇文章里我才采用了自定义的代码布局,需要在JAVA代码里去获取XML布局对象,然后对样式进行设置,而现在利用RadioGroup+RadioButton,我们可以把所有的样式都设置在XML布局文件里,这样更易于维护,在JAVA代码里我们可以更加专注于业务逻辑的代码实现。

好了,接下来上代码吧,由于和上个例子几乎一样,重复部分我就不贴出来了,只贴代码核心部分(注释很全)

 1 package com.example.tabhosttest;2 3 import android.app.ActivityGroup;4 import android.content.Intent;5 import android.os.Bundle;6 import android.view.View;7 import android.widget.ImageView;8 import android.widget.RadioGroup;9 import android.widget.RadioGroup.OnCheckedChangeListener;
10 import android.widget.TabHost;
11 import android.widget.TabHost.TabSpec;
12 import android.widget.TextView;
13
14 public class MainActivity extends ActivityGroup{
15
16     private TabHost tabHost;//声明一个TabHost对象
17
18     private RadioGroup radioGroup;//声明一个RadioGroup对象
19
20     //资源文件
21     private Class activitys[]={TabActivity1.class,TabActivity2.class,TabActivity3.class,TabActivity4.class,TabActivity5.class};//跳转的Activity
22     private String title[]={"首页","搜索","设置","主题","更多"};//设置菜单的标题
23     private int image[]={R.drawable.tab_icon1,R.drawable.tab_icon2,R.drawable.tab_icon3,R.drawable.tab_icon4,R.drawable.tab_icon5,};//设置菜单
24
25     @Override
26     protected void onCreate(Bundle savedInstanceState) {
27         super.onCreate(savedInstanceState);
28         setContentView(R.layout.activity_main);
29         initTabView();//初始化tab标签
30
31     }
32
33     private void initTabView() {
34         //实例化tabhost
35         this.tabHost=(TabHost) findViewById(R.id.mytabhost);
36         //由于继承了ActivityGroup,所以需要在setup方法里加入此参数,若继承TabActivity则可省略
37         tabHost.setup(this.getLocalActivityManager());
38
39         //创建标签
40         for(int i=0;i<activitys.length;i++){
41             /*由于采用了RadioGroup,样式已经在xml里设置,故这里无需再自定义view
42             //实例化一个view作为tab标签的布局
43             View view=View.inflate(this, R.layout.tab_layout, null);
44
45             //设置imageview
46             ImageView imageView=(ImageView) view.findViewById(R.id.image);
47             imageView.setImageDrawable(getResources().getDrawable(image[i]));
48             //设置textview
49             TextView textView=(TextView) view.findViewById(R.id.title);
50             textView.setText(title[i]);    */
51
52             //设置跳转activity
53             Intent intent=new Intent(this, activitys[i]);
54
55             //载入view对象并设置跳转的activity
56             TabSpec spec=tabHost.newTabSpec(title[i]).setIndicator(title[i]).setContent(intent);
57
58             //添加到选项卡
59             tabHost.addTab(spec);
60         }
61
62         radioGroup=(RadioGroup) findViewById(R.id.radiogroup);
63         radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
64
65             @Override
66             public void onCheckedChanged(RadioGroup group, int checkedId) {
67                 switch(checkedId){
68
69                 case R.id.radio1:
70                     //tabHost.setCurrentTab(int id); 用当前所在页数来跳转activity
71                     //tabHost.setCurrentTabByTag(String tag); 用当前标签来跳转activity
72                     tabHost.setCurrentTabByTag(title[0]);
73                     break;
74                 case R.id.radio2:
75                     tabHost.setCurrentTabByTag(title[1]);
76                     break;
77                 case R.id.radio3:
78                     tabHost.setCurrentTabByTag(title[2]);
79                     break;
80                 case R.id.radio4:
81                     tabHost.setCurrentTabByTag(title[3]);
82                     break;
83                 case R.id.radio5:
84                     tabHost.setCurrentTabByTag(title[4]);
85                     break;
86                 }
87
88             }
89         });
90
91     }
92
93
94 }

  1 <TabHost xmlns:android="http://schemas.android.com/apk/res/android"2     android:id="@+id/mytabhost"3     android:layout_width="fill_parent"4     android:layout_height="fill_parent" >5 6     <!-- 需要一个布局管理器 -->7 8     <RelativeLayout9         android:layout_width="fill_parent"10         android:layout_height="fill_parent" >11 12         <!--13        由于TabHost是继承于FrameLayout,所以需要一个FrameLaytout布局(内容页) ,id14        必须为tabcontent15         -->16         17         <FrameLayout18             android:id="@android:id/tabcontent"19             android:layout_width="fill_parent"20             android:layout_height="fill_parent" >21         </FrameLayout>22 23         <!-- TabWidget必须标签,用来存放tab标签,且id必须为tabs -->24 25         <TabWidget26             android:id="@android:id/tabs"27             android:layout_width="fill_parent"28             android:layout_height="wrap_content"29             android:layout_alignParentBottom="true"30             android:background="@drawable/tab_widget_background"31             android:visibility="gone" >32         </TabWidget>33 34         <RadioGroup35             android:id="@+id/radiogroup"36             android:layout_width="fill_parent"37             android:layout_height="wrap_content"38             android:layout_alignParentBottom="true"39             android:background="@drawable/tab_widget_background"40             android:orientation="horizontal"41             android:padding="3dp" >42 43             <RadioButton44                 android:id="@+id/radio1"45                 android:layout_width="wrap_content"46                 android:layout_height="wrap_content"47                 android:layout_weight="1"48                 android:background="@drawable/tab_selector"49                 android:button="@null"50                 android:drawablePadding="3dp"51                 android:drawableTop="@drawable/tab_icon1"52                 android:gravity="center_horizontal"53                 android:text="首页"54                 android:textColor="@android:color/white"55                 android:textSize="10sp" />56 57             <RadioButton58                 android:id="@+id/radio2"59                 android:layout_width="wrap_content"60                 android:layout_height="wrap_content"61                 android:layout_weight="1"62                 android:background="@drawable/tab_selector"63                 android:button="@null"64                 android:drawablePadding="3dp"65                 android:drawableTop="@drawable/tab_icon2"66                 android:gravity="center_horizontal"67                 android:text="搜索"68                 android:textColor="@android:color/white"69                 android:textSize="10sp" />70 71             <RadioButton72                 android:id="@+id/radio3"73                 android:layout_width="wrap_content"74                 android:layout_height="wrap_content"75                 android:layout_weight="1"76                 android:background="@drawable/tab_selector"77                 android:button="@null"78                 android:drawablePadding="3dp"79                 android:drawableTop="@drawable/tab_icon3"80                 android:gravity="center_horizontal"81                 android:text="设置"82                 android:textColor="@android:color/white"83                 android:textSize="10sp" />84 85             <RadioButton86                 android:id="@+id/radio4"87                 android:layout_width="wrap_content"88                 android:layout_height="wrap_content"89                 android:layout_weight="1"90                 android:background="@drawable/tab_selector"91                 android:button="@null"92                 android:drawablePadding="3dp"93                 android:drawableTop="@drawable/tab_icon4"94                 android:gravity="center_horizontal"95                 android:text="主题"96                 android:textColor="@android:color/white"97                 android:textSize="10sp" />98 99             <RadioButton
100                 android:id="@+id/radio5"
101                 android:layout_width="wrap_content"
102                 android:layout_height="wrap_content"
103                 android:layout_weight="1"
104                 android:background="@drawable/tab_selector"
105                 android:button="@null"
106                 android:drawablePadding="3dp"
107                 android:drawableTop="@drawable/tab_icon5"
108                 android:gravity="center_horizontal"
109                 android:text="更多"
110                 android:textColor="@android:color/white"
111                 android:textSize="10sp" />
112         </RadioGroup>
113     </RelativeLayout>
114
115 </TabHost>

转载于:https://www.cnblogs.com/awkflf11/p/4579540.html

转-TabHost组件(二)(实现底部菜单导航)相关推荐

  1. java底部菜单_安卓开发笔记——TabHost组件(一)(实现底部菜单导航)

    什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用windows操作系统的时候,经常见到如图所示的图形界面. TabHost选项卡,说到这个组件,不得不先 ...

  2. react 树形菜单_关于React 使用antd组件递归实现左侧菜单导航树(MenusTree)的示例...

    一.菜单组件Demo 这里本人采用的是蚂蚁金服(antd)组件库里的{Menu}组件写的一个左侧菜单树的小Demo(整套开发环境是React+Redux+webpack) import React f ...

  3. react 树形菜单_react使用antd组件递归实现左侧菜单导航树

    /** 左侧导航组件*/import React, { Component }from 'react'import { Link, withRouter }from 'react-router-dom ...

  4. 【微信小程序】之如何创建底部菜单?tabBar、mp-tabbar

    方法一:通过app.json配置底部菜单(常用) 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置.文件内容为一个 JSON 对象全局配置 | 微信开放文档微信开发者平台文档htt ...

  5. 微信小程序入门二:底部导航tabBar

    小程序底部导航栏组件tabBar,可以参考下官方的API:tabBar 先看代码 //app.json {"pages":["pages/index/index" ...

  6. 仿微信6.0 主界面 导航:左右滑动的ViewPager+渐变色的底部菜单

    本项目 封面图: 思路: body部分用ViewPager ,底部的图片渐变 ,可以调整两张重叠图片的透明度来实现. 1.底部的导航菜单,是自定义的一个布局.代码如下: package com.sam ...

  7. vant 组件van-tabbar实现底部导航

    vant 组件van-tabbar实现底部导航 简单使用van-tabbar实现底部导航 1.创建底部导航组件 2.子页面引用 优化van-tabbar使用 1.创建主页面 2.创建子模块 3.配置路 ...

  8. android让组件贴着顶部,Android中底部菜单被输入法顶上去的解决方案

    安卓手机输入法弹出,消失会触发 window.onresize事件,我们一般的解决方法是获取焦点,底部隐藏,失去焦点,底部菜单出现,但是,有些人会点击这个按钮收起键牌 那么,这个时候你的失去焦点无效, ...

  9. 从零开始学androidTabHost标签组件.二十九.

    TabHost主要特点是可以在一个窗口中显示多组标签栏的内容,在Android系统之中每个标签栏就称为一个Tab,而包含这多个标签栏的容器就将其称为TabHost,TabHost类的继承结构如下所示: ...

最新文章

  1. Swift中的一致性哈希算法(补充)
  2. 【原创】数据库中时间字段的值读取到DataSet中后,毫秒部分丢失。
  3. 攻防世界 web(二)
  4. 理解一下select 1 和 exists
  5. 面试题 03.02. 栈的最小值/面试题30. 包含min函数的栈/155. 最小栈
  6. 【jeecg移动开发能力】Jeecg 重磅来袭,强大移动报表配置能力,一次配置七种展现风格
  7. redis-配置说明-重要的几个配置
  8. 每日整理Python基础——python教程入门学习
  9. Sql Server数据库备份和恢复:原理篇
  10. 我不断收到“ Uncaught SyntaxError:意外令牌o”
  11. 简化document.createElement(div)动态生成层方法
  12. Linux安装Oracle,卡在60%处的解决方法
  13. ai决策_基于经验的决策与基于事实的决策:AI / ML如何改变工程师的工作方式
  14. OTDR系统的分类的特点
  15. 大规模异构图召回在美团到店推荐广告的应用
  16. 【TcaplusDB知识库】表操作—如何克隆表结构
  17. iOS内嵌unity
  18. [Eclipse手册]设置pom.xml打开方式
  19. java 实现秒抢_Java实现抢红包算法,附完整代码(公平版和手速版)
  20. 抄底绝招:底部大阳!

热门文章

  1. DataGridView多线程更新数据的问题的解决办法
  2. Linux/Unix服务端和客户端Socket编程入门实例(含源码下载)
  3. ListView提示和技巧
  4. [翻译]用表单字段加亮的方式为用户提供友好的界面
  5. C结构体之位域(位段)
  6. Python处理各种压缩文件(bzip2,gzip,zip)
  7. linux 文本排序、合并和分割 -转
  8. L3-006 迎风一刀斩 (30 分)-PAT 团体程序设计天梯赛 GPLT
  9. 解释汇编中的AUGW LABEL WORD、ADDW LABEL WORD
  10. 分析如何查找Linux死机的原因