TabHost的实现
来源:互联网 发布:淘宝手机秒杀专区 编辑:程序博客网 时间:2024/04/29 14:08
TabHost的实现
tabHost一般用于实现与QQ下面的“消息”“联系人”“动态”类似的选项卡
-xml文件
根布局标签为TabHost,子布局为FrameLayout和TabWidget
其中FrameLayout用来定义每个选项卡对应上面显示的布局,TabWidget用来定义项卡的共同属性
<?xml version="1.0" encoding="utf-8"?><TabHost android:id="@android:id/tabhost" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1"> <LinearLayout android:id="@+id/shouye" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="首页" android:textSize="64sp" android:gravity="center" android:textColor="@color/baseColor"/> </LinearLayout> <LinearLayout android:id="@+id/wenda" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="问答" android:textSize="64sp" android:gravity="center" android:textColor="@color/baseColor"/> </LinearLayout> <LinearLayout android:id="@+id/roundbutton" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="圆形按钮" android:textSize="64sp" android:gravity="center" android:textColor="@color/baseColor"/> </LinearLayout> <LinearLayout android:id="@+id/yuyue" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="预约" android:textSize="64sp" android:gravity="center" android:textColor="@color/baseColor"/> </LinearLayout> <LinearLayout android:id="@+id/my" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="我的" android:textSize="64sp" android:gravity="center" android:textColor="@color/baseColor"/> </LinearLayout> </FrameLayout> <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="70dp" android:orientation="horizontal" id:tabStripEnabled="false" android:showDividers="none" </TabWidget> </LinearLayout></TabHost>
需要注意的是TabHost和FrameLayout和TabWidget的id
是系统规定的id,要写成android:id=”@android:id/tabhost”,android:id=”@android:id/tabcontent”,android:id=”@android:id/tabs”,
跟一般情况下定义id的写法有所不同
在MainActivity中需要得到tabhost并创建每一个选项卡,在创建选项卡的同时设置选项卡的属性和显示的子view。通过当前activity的context得到tabHost,然后通过tabhost的newTabSpec方法创建选项卡,setIndicator(View view)方法是设置选项卡的布局,setContent(int id)方法是设置点击选项卡时显示的具体内容,代码如下:
package com.fengjianghui.personal.test;import android.app.TabActivity;import android.content.res.ColorStateList;import android.content.res.Resources;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TabHost;import android.widget.TextView;public class MainActivity extends TabActivity{ private TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //自定义方法,创建选项卡并将其添加到tabHost中 getTabSpecs (); } private void getTabSpecs() { tabHost = MainActivity.this.getTabHost(); //“首页”按钮 TabHost.TabSpec tabSpec1 = tabHost.newTabSpec("tab1").setIndicator(composedLayout("首页", R.drawable.selectedornot)).setContent(R.id.shouye); tabHost.addTab (tabSpec1); //“问答”按钮 TabHost.TabSpec tabSpec2 = tabHost.newTabSpec("tab2").setIndicator(composedLayout("问答",R.drawable.selectedornot1)).setContent(R.id.wenda); tabHost.addTab(tabSpec2); //中间的圆形按钮,调用的是imagelayout方法 TabHost.TabSpec tabSpec5 = tabHost.newTabSpec("tab5").setIndicator(imageLayout("123", R.mipmap.login20)).setContent(R.id.roundbutton); tabHost.addTab(tabSpec5); //“预约”按钮 TabHost.TabSpec tabSpec3 = tabHost.newTabSpec("tab3").setIndicator(composedLayout("预约", R.drawable.selectedornot2)).setContent(R.id.yuyue); tabHost.addTab(tabSpec3); //“我的”按钮 TabHost.TabSpec tabSpec4 = tabHost.newTabSpec("tab4").setIndicator(composedLayout("我的", R.drawable.selectedornot3)).setContent(R.id.my); tabHost.addTab(tabSpec4); } private View composedLayout(String s, int i) { //每个选项卡中最大的那个布局 LinearLayout layout0 = new LinearLayout(this); layout0.setOrientation(LinearLayout.VERTICAL); layout0.setGravity(Gravity.CENTER_VERTICAL); //用来填充下方的粉色背景的布局,布局中放图案和文字 LinearLayout layout1 = new LinearLayout(this); layout1.setOrientation(LinearLayout.VERTICAL); layout1.setGravity(Gravity.CENTER_HORIZONTAL); //layout1的参数设置 LinearLayout.LayoutParams lplayout1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); layout1.setBackgroundColor(getResources().getColor(R.color.baseColor)); lplayout1.setMargins(0, 10, 0, 0); //将layout1添加到layout0中 layout0.addView(layout1, lplayout1); //图片 ImageView imageView = new ImageView(this); imageView.setImageResource(i); imageView.setPadding(0, 14, 0, 0); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lp.setMargins(0, 10, 0, 0); //将图片添加到layout1中 layout1.addView(imageView, lp); //文字 TextView textView = new TextView(this); textView.setText(s); textView.setTextSize(16); Resources resource = (Resources) getBaseContext().getResources(); ColorStateList csl=(ColorStateList) resource.getColorStateList(R.color.text_color); textView.setTextColor(csl); textView.setSingleLine(true); textView.setGravity(Gravity.CENTER_HORIZONTAL); LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); textView.setPadding(0, 10, 0, 10); layout1.addView(textView, lp1); return layout0; } //中间圆形按钮的实现 private View imageLayout(String s, int i) { //最外层布局 LinearLayout linearLayout0 = new LinearLayout(this); linearLayout0.setOrientation(LinearLayout.VERTICAL); linearLayout0.setGravity(Gravity.CENTER_VERTICAL); //跟最外层布局一样大的帧布局 FrameLayout frameLayout0 = new FrameLayout(this); frameLayout0.setBackground(getResources().getDrawable(R.drawable.round_background)); linearLayout0.addView(frameLayout0); //帧布局中的linearlayout,用来设置下方的背景块 LinearLayout linearlayout1 = new LinearLayout(this); linearlayout1.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams lplinearlayout1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); TextView textView1 = new TextView(this); textView1.setBackgroundColor(getResources().getColor(R.color.baseColor)); LinearLayout.LayoutParams lptextview1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); lptextview1.setMargins(0, 10, 0, 0); linearlayout1.addView(textView1, lptextview1); frameLayout0.addView(linearlayout1, lplinearlayout1); //帧布局中的linearlayout,用来设置圆形的图片 LinearLayout linearLayout11 = new LinearLayout(this); linearLayout11.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams lplinearlayout11 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); frameLayout0.addView(linearLayout11, lplinearlayout11); ImageView imageView = new ImageView(this); imageView.setImageResource(i); LinearLayout.LayoutParams lpimageview = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); imageView.setPadding(10, -5, 10, 0); linearLayout11.addView(imageView, lpimageview); return linearLayout0; }}
代码资源点这里
0 0
- 实现美观的TabHost
- TabHost的底部实现
- TabHost的实现
- 基于RadioGroup的TabHost实现
- 底部Tab的实现(tabhost)
- Fragment实现tabhost的效果
- TabHost简单的代码实现
- TabHost的使用(二):实现TabHost.TabContentFactory接口
- Android_UI_实现TabHost的两种方法
- TabRadioDemo实现tabhost与RadioBox的结合
- 自定义View仿TabHost的实现(二)
- 自定义View仿TabHost的实现(一)
- 自定义View仿TabHost的实现
- Android--TabHost的两种实现方法
- Android_UI_实现TabHost的两种方法
- Android_UI_实现TabHost的两种方法
- tabHost的两种实现方式
- Android TabHost的三中实现方式
- Effective Java读书笔记(四)
- (安全系列二)apk反编译生成程序的源代码和图片、XML配置、语言资源等文件
- 创业公司中运营人员的典型一天是怎么度过的?
- C++中的inline函数
- 时间同步算法与Simple Ring-based election algorithm算法分析
- TabHost的实现
- lua中集成第三方拓展c库
- Mac OS X 下开发 Android 程序时使用 USB 连真机调试
- build.prop参数详解和部分修改
- 第3讲 TX2440A开发板外围硬件介绍
- 循环update不要写判断是否存在 if(!$XX)
- C#选择文件、选择文件夹、打开文件夹
- 深入理解RunLoop
- 使用MySQL统计页面访问及排名