©
이 문서에서는PHP 중국어 웹사이트 매뉴얼풀어 주다
TabHost
翻译时间:2010-11-25
版本:Android 2.3 r1
结构
继承关系
public classTabHostextendsFrameLayoutimplementsViewTreeObserver.OnTouchModeChangeListener
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.FrameLayout
android.widget.TabHost
类概述
提供选项卡(Tab页)的窗口视图容器。此对象包含两个子对象:一组是用户可以选择指定Tab页的标签;另一组是FrameLayout用来显示该Tab页的内容。个别元素通常控制使用这个容器对象,而不是设置在子元素本身的值。
(译者注:即使使用的是单个元素,也最好把它放到容器对象ViewGroup里)
内部类
interface TabHost.OnTabChangeListener
接口定义了当选项卡更改时被调用的回调函数
interface TabHost.TabContentFactory
当某一选项卡被选中时生成选项卡的内容
class TabHost.TabSpec
单独的选项卡,每个选项卡都有一个选项卡指示符,内容和tag标签,以便于记录.
公共方法
public voidaddTab(TabHost.TabSpec tabSpec)
新增一个选项卡
参数
tabSpec指定怎样创建指示符和内容.
public voidclearAllTabs()
从tab widget中移除所有关联到当前tab host的选项卡
public booleandispatchKeyEvent(KeyEvent event)
分发按键事件到焦点传递路线上的下一视图。焦点传递路线从视图树的顶层开始一直到当前获取焦点的视图停止。如果此视图已经获取焦点,将分发给它自身。否则,将分发到焦点传递路线的下一节点。此方法会触发任何一个按键监听器.
(译者注:关于focus path,可以参考以下地址:
http://blog.csdn.net/maxleng/archive/2010/05/04/5557758.aspx)
参数
event分发的按键事件
返回值
如果事件已经处理则返回true,否则返回false.
public voiddispatchWindowFocusChanged(boolean hasFocus)
当窗口包含的此视图获取或丢失焦点时触发此方法.ViewGroups应该重写以路由到他的子元素
参数
hasFocus如果窗口包含的此view依获取焦点,返回true,否则返回false.
public intgetCurrentTab()
(译者注:获取当前选项卡的id)
public StringgetCurrentTabTag()
(译者注:当前选项卡的Tag标签内容)
public ViewgetCurrentTabView()
(译者注:获取当前选项卡的视图view)
public ViewgetCurrentView()
(译者注:获取当前的视图view)
public FrameLayoutgetTabContentView()
获取保存tab内容的FrameLayout
public TabWidgetgetTabWidget()
(译者注:根据系统规定的id:tabs来找到TabWidget,并返回,注意,这里的ID必须是tabs。源代码中表示如下:
private TabWidget mTabWidget;
mTabWidget=(TabWidget)findViewById(com.android.internal.R.id.tabs);)
public TabHost.TabSpecnewTabSpec(String tag)
获取一个新的TabHost.TabSpec,并关联到当前tab host
参数
tag所需的选项卡标签(tag)
public voidonTouchModeChanged(boolean isInTouchMode)
当触摸模式发生改变时调用的回调函数.
参数
isInTouchMode如果视图结构当前处于触摸模式,返回true,否则返回false.
public voidsetCurrentTab(int index)
(译者注:设置当前的选项卡
参数
Index为当前选项卡的索引。)
public voidsetCurrentTabByTag(String tag)
(译者注:根据选项卡的Tab标签来设置当前的选项卡
参数
tag想要被设置为当前选项卡的tag标签值。)
public voidsetOnTabChangedListener(TabHost.OnTabChangeListener l)
注册一个回调函数,当选项卡中的任何一个tab的选中状态发生改变时调用。
(译者注:setCurrentTab(index)时会触发调用)
参数
l将运行的回调函数
public voidsetup()
如果使用findViewById()加载TabHost,那么在新增一个选项卡tab之前,需要调用setup()。然而,当你在一个TabActivity里使用getTabHost()获取TabHost,你就不再需要调用setup()了。(译者注:实现tab窗口的两种方法:继承activity时,使用findViewById()查找TabHost,然后调用setup();继承TabActivity,通过getTabHost()查找,此时不用调用setup())例子:
public voidsetup(LocalActivityManager activityGroup)
如果你使用setContent(android.content.Intent),那么当activityGroup用于加载本地activity之时,必须调用此方法。如果你拓展(继承)TabActivity将自动调用setup()方法。
参数
activityGroup用来为选项卡内容加载activities的ativityGroup
受保护方法
protected voidonAttachedToWindow()
当视图附加到窗口上时被调用。在这个点的表面进行绘制。注意此函数确保在onDraw(Cancas)之前调用,然而它可能在第一次执行onDraw之前的任何时间被调用——包括的onMeasure(int,int)的之前或之后。
protected void onDetachedFromWindow ()
当视图从窗口分离时被调用。在这个点的表面不再有画面绘制。
补充
文章链接
史上最全的Android的Tab与TabHost讲解
Android UI设计Tab TabHost标签页的使用
Android控件之TabHost Tab页
动态Tab页
示例代码
Java:
public class Tabs1 extends TabActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TabHost tabHost = getTabHost();
LayoutInflater.from(this).inflate(R.layout.tabs1, tabHost.getTabContentView(), true);
tabHost.addTab(tabHost.newTabSpec("tab1")
.setIndicator("tab1")
.setContent(R.id.view1));
tabHost.addTab(tabHost.newTabSpec("tab3")
.setIndicator("tab2")
.setContent(R.id.view2));
tabHost.addTab(tabHost.newTabSpec("tab3")
.setIndicator("tab3")
.setContent(R.id.view3));
}
}
XML:
android:layout_width="match_parent"
android:layout_height="match_parent">
android:background="@drawable/blue"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/tabs_1_tab_1"/>
android:background="@drawable/red"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/tabs_1_tab_2"/>
android:background="@drawable/green"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/tabs_1_tab_3"/>
详细参见apidemo/view/tabs1