android开发步步为营之31:TabActivity的用法Tab显示在底部

Tab标签页是一个非常常用的控件,.net里面就有multipage+tabstrip组合通过标签的切换实现页面的切换,同理html里面我们常用frameset来实现,android里面我们则通过使用FrameLayout+TabWidget, FrameLayout里面装载xml页面,TabWidget显示标签,点击标签跳转到相关的activity或者view。

public class TabActivity extends ActivityGroup的详细继承关系如下:

java.lang.Object

? android.content.Context

? android.content.ContextWrapper

? android.view.ContextThemeWrapper

? android.app.Activity

? android.app.ActivityGroup

? android.app.TabActivity

可以看到,TabActivity是继承自Activity,包含了一个TabHost组件。TabHost组件则是继承自FrameLayout的ViewGroup。 TabHost组件本身的id必须是@android:id/tabhost,它必须包含一个FrameLayout,并且该FrameLayout的id必须是@android:id/tabcontent,此外还要包含一个TabWidget,id是@android:id/tabs。 FrameLayout可以放置每个单独的Activity,而TabWidget则是每个Tab页签。默认第一个页签对应的Activity,会首先显示在FrameLayout里。然后每次点击其他的Tab页签,对应的Activity就会切换显示到FrameLayout里。这个有点类似html中的frameset的概念。

好,理论知识就介绍这么多,开始我们的实践,我们要实现的效果是:页面底部放置一个TabWidget,页头显示一个logo和文字介绍,页体则显示具体的activity对应的页面。让tab显示在底部的设置很简单,只要将TabWidget 的属性android:layout_alignParentBottom="true"

android:layout_alignParentTop="false"

这样设置即可,要显示在顶部则反一下即可

android:layout_alignParentBottom="false"

android:layout_alignParentTop="true"

第一步:创建页面

主页面:tabactivityview.xml 包含页头head_line 页体 FrameLayout 页脚TabWidget

<?xml version="1.0" encoding="UTF-8"?>

<TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent"

android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">

<RelativeLayout android:orientation="vertical"

android:layout_width="fill_parent" android:layout_height="fill_parent">

<include android:id="@+id/head_line" layout="@layout/head_line"

android:layout_width="fill_parent" android:layout_height="wrap_content" />

<FrameLayout android:id="@android:id/tabcontent"

android:layout_below="@id/head_line" android:layout_width="fill_parent"

android:layout_height="fill_parent" android:layout_weight="1.0" />

<TabWidget android:id="@android:id/tabs"

android:layout_gravity="bottom" android:layout_height="60.0dip"

android:layout_width="fill_parent" android:fadingEdge="none"

android:fadingEdgeLength="0.0px" android:paddingLeft="0.0dip"

android:paddingTop="2.0dip" android:paddingRight="0.0dip"

android:paddingBottom="0.0dip" android:layout_alignParentBottom="false"

android:layout_alignParentTop="true" />

</RelativeLayout>

</TabHost>

页头:head_line.xml  包含图标和文字

<RelativeLayout

android:layout_width="fill_parent" android:layout_height="wrap_content"

xmlns:android="http://schemas.android.com/apk/res/android">

<ImageView android:layout_height="wrap_content" android:src="@drawable/icon" android:layout_width="wrap_content" android:id="@+id/imageView1" android:layout_alignParentTop="true" android:layout_alignLeft="@+id/top_btn_left"></ImageView>

<TextView android:gravity="center_horizontal" android:text="better pay,better life" android:layout_height="wrap_content" android:textSize="22.0sp" android:layout_width="wrap_content" android:layout_alignWithParentIfMissing="true" android:singleLine="true"
android:id="@+id/top_title" android:ellipsize="middle" android:layout_centerVertical="true" android:layout_centerHorizontal="true"></TextView>

</RelativeLayout>

标签:tab_item.xml 包含图标和文字

<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout android:orientation="vertical"

android:layout_width="fill_parent" android:layout_height="wrap_content"

xmlns:android="http://schemas.android.com/apk/res/android">

<ImageView android:id="@+id/tab_item_imageview"

android:layout_width="fill_parent" android:layout_height="32.0dip"

android:scaleType="fitCenter" />

<TextView android:id="@+id/tab_item_textview"

android:layout_width="fill_parent" android:layout_height="wrap_content"

android:gravity="center" android:singleLine="true"

android:marqueeRepeatLimit="1" android:textSize="11.0sp"

android:ellipsize="marquee" />

</LinearLayout>

第二步、创建Activity MyTabActivity.java

/**

*

*/

package com.figo.helloworld;

import android.app.TabActivity;

import android.content.Intent;

import android.content.res.Resources;

import android.os.Bundle;

import android.view.View;

import android.widget.ImageView;

import android.widget.TabHost;

import android.widget.TabHost.TabSpec;

import android.widget.TextView;

/**

* @author zhuzhifei

*

*/

public class MyTabActivity extends TabActivity {

private TabHost tabHost;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.tabactivityview);//设置显示的页面

tabHost = getTabHost();//获取tabHost

createTab();//创建tab集合

}

/**

* 组装tab控件

*/

private void createTab() {

Resources res = getResources();

createTabItem(R.drawable.icon,

res.getString(R.string.pay), new Intent(this,

HelloWorldActivity.class));

createTabItem(R.drawable.icon,

res.getString(R.string.transact), new Intent(this,

ListViewActivity.class));

createTabItem(R.drawable.icon,

res.getString(R.string.account), new Intent(this,

HelloWorldActivity.class));

createTabItem(R.drawable.icon,

res.getString(R.string.message), new Intent(this,

HelloWorldActivity.class));

createTabItem(R.drawable.icon,

res.getString(R.string.tip), new Intent(this,

HelloWorldActivity.class));

}

/**

* 生成tab_item

*

* @param imageResourceSelector

*            图片选择器

* @param text

*            文本

* @param intent

*            intent

*/

private void createTabItem(int imageResourceSelector, String text,

Intent intent) {

View view = View.inflate(this, R.layout.tab_item, null);// 拼装view

((ImageView) view.findViewById(R.id.tab_item_imageview))

.setImageResource(imageResourceSelector);

((TextView) view.findViewById(R.id.tab_item_textview)).setText(text);

TabSpec spec = tabHost.newTabSpec(text).setIndicator(view)

.setContent(intent);// 将view注入spec,setContent有多个重载方法供使用

tabHost.addTab(spec);

}

}

第三步、AndroidManifest.xml注册Activity

<activity android:name=".MyTabActivity">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

第四步、运行效果

选中第一个tab

选中第二个tab

时间: 2024-11-08 13:23:37

android开发步步为营之31:TabActivity的用法Tab显示在底部的相关文章

TabActivity的用法Tab显示在底部

Tab标签页是一个非常常用的控件,.net里面就有multipage+tabstrip组合通过标签的切换实现页面的切换,同理html里面我们常用frameset来实现,android里面我们则通过使用FrameLayout+TabWidget, FrameLayout里面装载xml页面,TabWidget显示标签,点击标签跳转到相关的activity或者view.public class TabActivity extends ActivityGroup的详细继承关系如下:     java.l

android开发步步为营之63:webview常用用法

webview是常用的组件,特别是当前h5这么流行的情况下,本文介绍webview在项目中的常规用法.一般是webview加载的过程前会对当前网络做判断,没有网络的情况下给个提示.有网络的情况下配一个progressbar显示当前进度,好的,上代码.       第一步:设计页面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schem

android开发步步为营之35:GridView的用法

之前使用asp.net开发软件的过程中也使用GridView,发现android里面也有这么一个控件,使用方法有点相似,都是使用适配器将数据绑定到这个控件,然后将数据展示出来,应该说它和ListView一样,是个非常常用的控件,所以我们应该学习如何使用它,理论知识是没多少的,就是一个展示数据的控件,继承关系如下: public class GridView extends AbsListView java.lang.Object android.view.View android.view.Vi

android开发步步为营之56:Android开发技术点总结(持续更新)

1.eclipse svn插件下载 http://subclipse.tigris.org/update_1.6.x http://subclipse.tigris.org/update_1.8.x 64位机器 http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 2.eclipse常用插件下载 http://blog.csdn.net/jackiehff/article/details/8181945 3.unico

android开发步步为营之34:四大组件之ContentProvider

ContentProvider,从字面意义上理解,内容提供者,这个类目的就是一个桥梁的作用,让一个应用的数据(SQLiteDatabase, SharedPreferences,Xml,Txt等数据),通过ContentProvider可以让其他的应用访问. 理论知识 (一).ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同

android开发步步为营之70:android接入Google Analytics总结

求人不如求己,今天项目里要接入Google Analytics,这个是做应用统计分析用的,可以查看当前手机活跃用户,事件点击等等数据,先看看效果: 之前eclipse里面接入已经成功,昨天项目组决定项目转成使用android studio来开发,看google官方文档,官方文档https://developers.google.com/analytics/devguides/collection/android/v4/,然后官方文档里面的配置文件是用google-services.json的,这

android开发步步为营之20:网络设置

网络设置这块在手机应用里面是非常重要的一块,因为一般应用都需要和外部网络做交互的.本篇文章就展示了一个比较经典应用场景.比如我最近在开发的转账应用.这个是需要和网络交互的.当用户打开应用之后,应用首先会判断用户是否已经打开wifi或者gprs网络.没有则跳转到系统的无线和网络设置界面,当用户设置好了之后,我这里做了一个更人性化的处理,创建了一个广播接收器,因为我们知道,手机在打开网络或者收到短信的时候,都会对外发布一条广播.一旦网络连接上了之后,我的这个广播接收器,就会收到信息,然后判断当前的转

android开发步步为营之22:处理Activity中的back按钮事件

在手机应用中,用户点击回退按钮一般是返回上个页面,一般页面不用处理,如果在首页,点回退,没任何提示,就把应用给关了,这个用户体验就不太好了,所以一般都会给用户一个确认的提示:是否退出?免得用户误操作. 一. Activity 中处理 @Override public boolean onKeyDown( int keyCode, KeyEvent event) { // TODO Auto-generated method stub Toast.makeText( this , "onkeydo

android开发步步为营之58:给图片绘制圆形气泡背景效果

最近在开发项目的时候,有一个需求,需要给应用图标绘制圆形气泡背景,有了彩色气泡这样显得漂亮一点,气泡的颜色是应用图标的颜色均值,先看看效果,然后,我再给出demo. demo应用图标是这样的: 添加气泡背景后是这样的: 仔细看圆形背景颜色是图标颜色的均值. 好的,下面我们来完成这个demo. 第一步.编写页面activity_drawcycle.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa