Android控件-TabHost(二)
这边再补充一种更为灵活的方法,可以把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代码里我们可以更加专注于业务逻辑的代码实现。
好了,接下来上代码吧,由于和上个例子几乎一样,重复部分我就不贴出来了,只贴代码核心部分(注释很全)
package com.example.tabhosttest; import android.app.ActivityGroup; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.TabHost; import android.widget.TabHost.TabSpec; import android.widget.TextView; public class MainActivity extends ActivityGroup{ private TabHost tabHost;//声明一个TabHost对象 private RadioGroup radioGroup;//声明一个RadioGroup对象 //资源文件 private Class activitys[]={TabActivity1.class,TabActivity2.class,TabActivity3.class,TabActivity4.class,TabActivity5.class};//跳转的Activity private String title[]={"首页","搜索","设置","主题","更多"};//设置菜单的标题 private int image[]={R.drawable.tab_icon1,R.drawable.tab_icon2,R.drawable.tab_icon3,R.drawable.tab_icon4,R.drawable.tab_icon5,};//设置菜单 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initTabView();//初始化tab标签 } private void initTabView() { //实例化tabhost this.tabHost=(TabHost) findViewById(R.id.mytabhost); //由于继承了ActivityGroup,所以需要在setup方法里加入此参数,若继承TabActivity则可省略 tabHost.setup(this.getLocalActivityManager()); //创建标签 for(int i=0;i<activitys.length;i++){ /*由于采用了RadioGroup,样式已经在xml里设置,故这里无需再自定义view //实例化一个view作为tab标签的布局 View view=View.inflate(this, R.layout.tab_layout, null); //设置imageview ImageView imageView=(ImageView) view.findViewById(R.id.image); imageView.setImageDrawable(getResources().getDrawable(image[i])); //设置textview TextView textView=(TextView) view.findViewById(R.id.title); textView.setText(title[i]); */ //设置跳转activity Intent intent=new Intent(this, activitys[i]); //载入view对象并设置跳转的activity TabSpec spec=tabHost.newTabSpec(title[i]).setIndicator(title[i]).setContent(intent); //添加到选项卡 tabHost.addTab(spec); } radioGroup=(RadioGroup) findViewById(R.id.radiogroup); radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch(checkedId){ case R.id.radio1: //tabHost.setCurrentTab(int id); 用当前所在页数来跳转activity //tabHost.setCurrentTabByTag(String tag); 用当前标签来跳转activity tabHost.setCurrentTabByTag(title[0]); break; case R.id.radio2: tabHost.setCurrentTabByTag(title[1]); break; case R.id.radio3: tabHost.setCurrentTabByTag(title[2]); break; case R.id.radio4: tabHost.setCurrentTabByTag(title[3]); break; case R.id.radio5: tabHost.setCurrentTabByTag(title[4]); break; } } }); } }
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mytabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 需要一个布局管理器 --> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 由于TabHost是继承于FrameLayout,所以需要一个FrameLaytout布局(内容页) ,id 必须为tabcontent --> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" > </FrameLayout> <!-- TabWidget必须标签,用来存放tab标签,且id必须为tabs --> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@drawable/tab_widget_background" android:visibility="gone" > </TabWidget> <RadioGroup android:id="@+id/radiogroup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@drawable/tab_widget_background" android:orientation="horizontal" android:padding="3dp" > <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/tab_selector" android:button="@null" android:drawablePadding="3dp" android:drawableTop="@drawable/tab_icon1" android:gravity="center_horizontal" android:text="首页" android:textColor="@android:color/white" android:textSize="10sp" /> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/tab_selector" android:button="@null" android:drawablePadding="3dp" android:drawableTop="@drawable/tab_icon2" android:gravity="center_horizontal" android:text="搜索" android:textColor="@android:color/white" android:textSize="10sp" /> <RadioButton android:id="@+id/radio3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/tab_selector" android:button="@null" android:drawablePadding="3dp" android:drawableTop="@drawable/tab_icon3" android:gravity="center_horizontal" android:text="设置" android:textColor="@android:color/white" android:textSize="10sp" /> <RadioButton android:id="@+id/radio4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/tab_selector" android:button="@null" android:drawablePadding="3dp" android:drawableTop="@drawable/tab_icon4" android:gravity="center_horizontal" android:text="主题" android:textColor="@android:color/white" android:textSize="10sp" /> <RadioButton android:id="@+id/radio5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/tab_selector" android:button="@null" android:drawablePadding="3dp" android:drawableTop="@drawable/tab_icon5" android:gravity="center_horizontal" android:text="更多" android:textColor="@android:color/white" android:textSize="10sp" /> </RadioGroup> </RelativeLayout> </TabHost>