第一步:首先你得了解TabHost和TabWidget,将TabHost分为两个部分,一个是放内容的,还有一个就是放选项卡的,我们这里选项卡用TabWidget。TabHost的id应该写为

android:id="@android:id/tabhost",而不是以前的那个加号,这样可以直接在Activity里面通过getTabHost方法得到此TabHost对象。那如何才能将选项卡放在最底部呢,这其实很简单,还记得RelativeLayout中android:layout_alignBottom 这个不,也就是说将TabWidget和选项卡内容放到RelativeLayout布局里,废话不多说了,看代码

<?xmlversion="1.0"encoding="utf-8"?>
  1. <TabHostandroid:layout_width="fill_parent"
  2. android:layout_height="fill_parent"
  3. android:id="@android:id/tabhost"
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. >
  6. <RelativeLayout
  7. android:layout_width="fill_parent"
  8. android:layout_height="fill_parent"
  9. android:orientation="vertical"
  10. android:padding="3dp"
  11. >
  12. <FrameLayout
  13. android:layout_width="fill_parent"
  14. android:layout_height="fill_parent"
  15. android:id="@android:id/tabcontent"
  16. android:layout_weight="1"
  17. >
  18. </FrameLayout>
  19. <TabWidget
  20. android:layout_width="fill_parent"
  21. android:layout_height="50dip"
  22. android:id="@android:id/tabs"
  23. android:layout_alignBottom="@android:id/tabcontent"
  24. />
  25. </RelativeLayout>
  26. </TabHost>


以上xml代码可以通用哈,FrameLayout里用来放内容的,Tab的xml基本结构就这样搭好了,

第二步:接下来就是往Activity里面写点东东了,这个Activity必须要继承下TabActivity,要不然就算你setContentView了上面那个xml也没法通过getTabHost()获得布局中的tabHost。

然后通过getTabHost得到TabHost对象。我这里打算建立四个选项卡,newTabSpec 这是为你的每一个选项卡上面打上一个Tag,也就是标记标记而已,特殊情况下你可以通过这个来查找到你的选项卡。setIndicator就是在你的选项卡上设置一些内容,至于什么内容,你懂的,要么是文字,要么是图片,要么就是文字加图片,当然有时候复杂的话还会写上布局文件。我这里就放上一个图片吧,然后这个图片加上一些特效,懒得在xml写什么布局了,直接在代码写了,返回的是一个View对象,废话有点多,直接看代码吧

privateclassTabViewextendsLinearLayout{
  1. ImageViewimageView;
  2. publicTabView(Contextc,intdrawable,intdrawableselec){
  3. super(c);
  4. imageView=newImageView(c);
  5. StateListDrawablelistDrawable=newStateListDrawable();
  6. listDrawable.addState(SELECTED_STATE_SET,this.getResources()
  7. .getDrawable(drawableselec));
  8. listDrawable.addState(ENABLED_STATE_SET,this.getResources()
  9. .getDrawable(drawable));
  10. imageView.setImageDrawable(listDrawable);
  11. imageView.setBackgroundColor(Color.TRANSPARENT);
  12. setGravity(Gravity.CENTER);
  13. addView(imageView);
  14. }


上面的代码也就是自定义的一个View吧。

下面这个就是构建选项卡以及内容(选中的是第二个选项卡),我这里就把每个不同的选项卡内容分别放在不同的Activity里面,然后通过Tab来将这些Activity合并在一起,这样显得比较有层次感。

@Override
  1. publicvoidonCreate(BundlesavedInstanceState){
  2. super.onCreate(savedInstanceState);
  3. requestWindowFeature(Window.FEATURE_NO_TITLE);
  4. setContentView(R.layout.main_tab);
  5. TabHosttabHost=getTabHost();
  6. TabViewview=null;
  7. //最近联系人
  8. view=newTabView(this,R.drawable.bg_tab_dial_normal,R.drawable.bg_tab_dial_normal);
  9. view.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.selecttabbackground));
  10. TabSpecrecentContactSpec=tabHost.newTabSpec("RecentContact");
  11. recentContactSpec.setIndicator(view);
  12. IntentrecentContactIntent=newIntent(this,RecentContactActivity.class);
  13. recentContactSpec.setContent(recentContactIntent);
  14. //联系人
  15. view=newTabView(this,R.drawable.bg_tab_contact_normal,R.drawable.bg_tab_contact_normal);
  16. view.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.selecttabbackground));
  17. TabSpeccontactBookSpec=tabHost.newTabSpec("ContactBook");
  18. contactBookSpec.setIndicator(view);
  19. IntentcontactBookIntent=newIntent(this,ContactBookActivity.class);
  20. contactBookSpec.setContent(contactBookIntent);
  21. //短信
  22. view=newTabView(this,R.drawable.bg_tab_sms_normal,R.drawable.bg_tab_sms_normal);
  23. view.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.selecttabbackground));
  24. TabSpecsmsMessageSpec=tabHost.newTabSpec("SmsMessage");
  25. smsMessageSpec.setIndicator(view);
  26. IntentsmsMessageIntent=newIntent(this,SmsMessageActivity.class);
  27. smsMessageSpec.setContent(smsMessageIntent);
  28. //设置
  29. view=newTabView(this,R.drawable.bg_tab_setting_normal,R.drawable.bg_tab_setting_normal);
  30. view.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.selecttabbackground));
  31. TabSpecsettingSpec=tabHost.newTabSpec("Setting");
  32. settingSpec.setIndicator(view);
  33. IntentsettingIntent=newIntent(this,SettingActivity.class);
  34. settingSpec.setContent(settingIntent);
  35. tabHost.addTab(recentContactSpec);
  36. tabHost.addTab(contactBookSpec);
  37. tabHost.addTab(smsMessageSpec);
  38. tabHost.addTab(settingSpec);
  39. tabHost.setCurrentTab(1);
  40. }


这个我没有写Demo,也就不提供详细的Demo了,不过还是截个图吧

[置顶] Android 位于底部的Tab_第1张图片

更多相关文章

  1. Android 轻松实现语音识别的完整代码[转]
  2. 深入解析_Android的自定义布局
  3. Android通用圆角布局(兼容Android P)
  4. Android Studio 添加 C、C++ 代码
  5. Android 实现语音识别的完整代码
  6. Android 中使用代码动态网格布局

随机推荐

  1. Android学习11--事件处理
  2. Android(安卓)小项目之--Mini音乐播放器
  3. Android(安卓)四大组件之Activity
  4. [置顶] 那些你应该知道却不一定知道的—
  5. [置顶] (android高仿系列)今日头条 --新闻
  6. Mac系统配置Android(安卓)Studio的gradle
  7. 一篇文章了解大前端
  8. android--理解和使用自定义权限
  9. 最近排查android webview https的发热耗
  10. 彻底扁平惹眼球 Android(安卓)5.0亮点汇