解析Android Widget中文API中TabWidget

移动开发
Android中文API中TabWidget的内容是本文要介绍的内容,主要是来了解并学习Android Widget 的应用及TabWidget的应用,具体内容的实现来看本文详解。

Android中文API中TabWidget的内容是本文要介绍的内容,主要是来了解并学习Android Widget 的应用及TabWidget的应用,具体内容的实现来看本文详解。

一、结构

publicclassTabWidgetextendsLinearLayout  
 
implementsView.OnFocusChangeListener  
 
java.lang.Object  
 
android.view.View  
 
android.view.ViewGroup  
 
android.widget.LinearLayout  
 
android.widget.TabWidget 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

二、概述

显示选项卡标签的列表,用于代表父选项卡集合的每一页。当前widget的容器对象是TabHost。当用户选择一个选项卡时,此对象给父容器对象TabHost发送一个消息,告诉TabHost切换到对应的页面显示。此对象上的很多方法,你通常不会直接使用。容器TabHost被用来添加标签,添加并管理回调函数。你可能会调用此对象以迭代选项卡列表,或者调整选项卡列表的布局,但大多数方法应该是通过容器TabHost对象调用。

参见TabLayouttutorial。

三、XML属性

属性名称描述

android:divider可绘制对象,被绘制在选项卡窗口间充当分割物。

android:tabStripEnabled确定是否在选项卡绘制

android:tabStripLeft被用来绘制选项卡下面的分割线左边部分的可视化对象。

android:tabStripRight被用来绘制选项卡下面的分割线右边部分的可视化对象。

四、公共方法

publicvoidaddView(Viewchild) 
  • 1.

增加子视图。如果子视图没有设置布局参数,那么将为子视图设置此ViewGroup默认的布局参数。

参数

child新增的子视图

publicvoidchildDrawableStateChanged(Viewchild) 
  • 1.

如果调用addStatesFromChildren函数返回true,刷新此组的可视化对象的状态(包括它的子元素的状态)。

参数

child可视化对象状态被改变的子元素。

publicvoiddispatchDraw(Canvascanvas) 
  • 1.

绘制时调用此方法来绘制子视图。派生类在被绘制之前,为获取控制可能会重写此方法(但必须在它自己的视图已经被绘制之后)。

参数

canvas绘制视图的画布(canvas)

publicvoidfocusCurrentTab(intindex) 
  • 1.

设置当前选项卡并且让其获得焦点。此方法确保获取焦点的选项卡窗口匹配选中的窗口,一般情况下类似setCurrentTab(int)。通常当我们通过操作UI实现时,这些都不是问题,因为UI负责调用TabWidget.onFocusChanged(),但如果我们通过程序控制选中选项卡窗口,那么我们就必须确认保持焦点。(译者注:setCurrentTab(int)执行后,选中指定索引的选项卡窗口,但不获取焦点。focusCurrentTab(int)执行后,不仅通过调用setCurrentTab(int)选中指定索引的选项卡窗口还获取焦点。)

参数

index你想要设置焦点(橘色高亮)并且选中(选项卡被至于部件widget的前端)的选项卡。

参见

setCurrentTab(int)  
publicViewgetChildTabViewAt(intindex) 
  • 1.
  • 2.

返回位于指定索引位置的选项卡标识符的视图

参数

index选项卡指示符视图返回的从零开始的索引

返回值

在提供的索引位置上的选项卡指示符视图

publicintgetTabCount() 
  • 1.

返回选项卡的数量

返回值

选项卡指示符视图的数量

publicbooleanisStripEnabled() 
  • 1.

指明选项卡指示符的底部分隔线是否绘制

publicvoidonFocusChange(Viewv,booleanhasFocus) 
  • 1.

当视图的焦点状态被改变时调用。

参数

v状态变化的视图

hasFocus视图的新焦点状态。

publicvoidsendAccessibilityEventUnchecked(AccessibilityEventevent) 
  • 1.

处理用于发送AccessibilityEvent的请求。如果再发送之前调度事件,本方法不保证可访问性检查。可以通过调用者调用isEnabled()检查。

参数

#p#

event事件

publicvoidsetCurrentTab(intindex) 
  • 1.

设置当前选项卡。此方法被用来将选项卡置于widget的前部,并且通知其它的UI元素,一个不同的选项卡被调整到了前台。注意,这不同于传统的“焦点”,是从视图逻辑的焦点。

例如,如果我们在选项卡式视图中有一个列表,一个用户可能会上下移动列表,通过列表选项移动UI焦点(橘色高亮)。光标的移动并不影响选项卡的选中状态,因为滚动是在同一个选项卡上的。选中的选项卡仅仅当我们在选项卡上切换时(在此例中,从列表视图移到下一选项卡视图)更改。如果想要一次性的设置焦点并选中选项卡,请使用setCurrentTab(int)。

正常情况下,视图逻辑关注调整焦点,除非你规避了UI,你可能仅仅将你的兴趣集中在这里。

参数

index你想要指做选中选项卡的选项卡索引(选项卡被显示到widget的前部)

参见

focusCurrentTab(int)  
 
publicvoidsetDividerDrawable(Drawabledrawable) 
  • 1.
  • 2.
  • 3.

设置用于在选项窗口指示符间分隔的可绘制对象

参数

drawable用于分隔的可绘制对象

publicvoidsetDividerDrawable(intresId) 
  • 1.

设置用于在两个选项卡标识符之间进行分隔的可绘制对象

参数

resId被用来分隔的可绘制对象的资源标识

publicvoidsetEnabled(booleanenabled) 
  • 1.

设置当前视图的启用状态。子类的不同而其对应的启用状态的解释也不相同。

参数

enabled是否启动

publicvoidsetLeftStripDrawable(intresId) 
  • 1.

设置被用来当作选项卡指示符下面的分割线,左边部分的可绘制对象。

参数

resIdthe被用来当作左边分隔线的可绘制对象的资源标识符

publicvoidsetLeftStripDrawable(Drawabledrawable) 
  • 1.

设置被用来当作选项卡指示符下面的分割线,左边部分的可绘制对象。

参数

drawable左边分隔线的可绘制对象

publicvoidsetRightStripDrawable(intresId) 
  • 1.

设置被用来当作选项卡指示符下面的分割线,右边部分的可绘制对象。

参数

resId被用来当作右边分隔线的可绘制对象的资源标识符

publicvoidsetRightStripDrawable(Drawabledrawable) 
  • 1.

设置被用来当作选项卡指示符下面的分割线,右边部分的可绘制对象。

参数

drawable右边分隔线的可绘制对象

publicvoidsetStripEnabled(booleanstripEnabled) 
  • 1.

控制选项卡指示符底部的分隔线是否绘制。默认是绘制。如果用户为选项卡指示符指定一个定制的视图,那么TabHost类调用此方法以禁用绘制底部分割线。

参数

stripEnabled如果需要绘制底部分割线为true

#p#

五、受保护方法

protectedintgetChildDrawingOrder(intchildCount,inti) 
  • 1.

返回要绘制的子元素在当前迭代中的索引。如果你需要修改子元素的绘制顺序,可以覆写此方法。默认情况下返回参数i值。

注意:为使此方法被调用,你必须先通过调用setChildrenDrawingOrderEnabled(boolean)启用子元素排序

参数

i当前的迭代值

返回值

将要绘制的子元素在当前迭代的索引

protectedvoidonSizeChanged(intw,inth,intoldw,intoldh) 
  • 1.

布局过程中,当此视图的大小发生改变时被调用的。如果你只是添加到视图的层次结构,你调用时可以使用0当作之前的值(oldvalue)。

参数

w此视图的当前宽度

h此视图的当前高度

oldwOld此视图之前的宽度

oldh此视图之前的高度

示例代码

JAVA

 

public class TabDemo1 extends Activity implements OnClickListener {  
 
    TabHost mTabHost = null;  
    TabWidget mTabWidget = null;  
    Button btnVisiable, btnStrip;  
 
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        // TODO Auto-generated method stub  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.tabdemo1);  
        mTabHost = (TabHost) findViewById(android.R.id.tabhost);  
        mTabHost.setup();  
        mTabWidget = mTabHost.getTabWidget();  
        mTabHost.addTab(mTabHost.newTabSpec("tab1").setContent(  
                R.id.LinearLayout001).setIndicator("Tab1"));  
        mTabHost.addTab(mTabHost.newTabSpec("tab2").setContent(  
                R.id.LinearLayout002).setIndicator("Tab2"));  
        mTabHost.addTab(mTabHost.newTabSpec("tab3").setContent(  
                R.id.LinearLayout003).setIndicator("Tab3"));  
 
        // mTabHost.setCurrentTab(1);  
        btnVisiable = (Button) findViewById(R.id.btnVisiable);  
        btnStrip = (Button) findViewById(R.id.btnStrip);  
        btnVisiable.setOnClickListener(this);  
        btnStrip.setOnClickListener(this);  
        setTitle("共有" + mTabWidget.getTabCount() + "个tab");  
    }  
 
    @Override  
    public void onClick(View v) {  
        // TODO Auto-generated method stub  
        switch (v.getId()) {  
        case R.id.btnVisiable:  
            if (mTabWidget.getVisibility() != android.view.View.VISIBLE)  
                mTabWidget.setVisibility(android.view.View.VISIBLE);  
            else  
                mTabWidget.setVisibility(android.view.View.INVISIBLE);  
            break;  
 
        case R.id.btnStrip:  
            mTabWidget.setStripEnabled(!mTabWidget.isStripEnabled());  
            mTabWidget.setRightStripDrawable(android.R.color.transparent);  
            break;  
        default:  
            break;  
        }  
    }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.

XML

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:id="@android:id/tabhost"> 
    <LinearLayout android:layout_width="fill_parent" 
        android:orientation="vertical" android:layout_height="fill_parent"> 
            
        <TabWidget android:id="@android:id/tabs" 
            android:layout_width="fill_parent" android:layout_height="wrap_content"></TabWidget> 
        <FrameLayout android:id="@android:id/tabcontent" 
            android:layout_height="wrap_content" android:layout_width="fill_parent"> 
            <LinearLayout android:id="@+id/LinearLayout001" android:orientation="vertical" 
                android:layout_width="fill_parent" android:layout_height="fill_parent"> 
            <Button android:id="@+id/btnVisiable" android:text="显示状态切换" 
                    android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
                <Button android:id="@+id/btnStrip" android:layout_width="fill_parent" 
                    android:layout_height="wrap_content" android:text="分隔线状态切换"></Button> 
                <TextView android:id="@+id/TextView1" android:layout_width="fill_parent" 
                    android:layout_height="wrap_content" android:text="小龙是好人!!!"></TextView> 
                  
            </LinearLayout> 
            <LinearLayout android:id="@+id/LinearLayout002" 
                android:layout_width="fill_parent" android:layout_height="fill_parent"> 
                <TextView android:id="@+id/TextView2" android:layout_width="fill_parent" 
                    android:layout_height="wrap_content" android:text="小龙是坏蛋!"></TextView> 
            </LinearLayout> 
            <LinearLayout android:id="@+id/LinearLayout003" 
                android:layout_width="fill_parent" android:layout_height="fill_parent"> 
                <TextView android:id="@+id/TextView3" android:layout_width="fill_parent" 
                    android:layout_height="wrap_content" android:text="小龙还是坏蛋!"></TextView> 
            </LinearLayout> 
        </FrameLayout> 
    </LinearLayout> 
</TabHost> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

小结:解析Android Widget中文API中TabWidget的内容介绍完了,希望通过Android Widget的学习能对你有所帮助。

责任编辑:zhaolei 来源: 博客园
相关推荐

2011-09-09 10:00:20

Android Wid开发

2011-09-07 14:01:41

Android Wid实例

2011-09-07 14:34:55

Android Wid控件

2011-09-07 17:54:40

Android Wid开发

2011-09-07 14:39:47

Android Wid设计

2010-07-13 09:08:27

Widget开发

2011-09-08 15:40:45

Android Wid组件

2011-09-07 14:25:53

Android Wid设计

2010-04-23 11:21:05

Widget开发

2011-09-07 10:44:05

Android Wid

2011-09-09 17:59:26

QT Widget

2011-09-07 14:55:28

Android WidAppWidget事件

2011-09-08 16:17:45

Widget

2011-09-08 14:21:37

jQueryWidget

2011-09-09 19:23:52

Widget

2011-09-09 13:23:17

Widget

2011-09-07 14:20:42

Android Wid组件

2011-09-14 14:08:23

Android API

2011-09-14 13:09:06

Android API

2011-09-14 13:56:28

Android API
点赞
收藏

51CTO技术栈公众号