【Android UI】TabHos之基础实现
2015-08-10 10:14
681 查看
Tabhost是一种在安卓4.0之后就被建议不使用的一个组件。目前大部分流行时用的是Fragment组件来代替它,但是作为里程碑式的东西,我们还是有必要花费时间去了解
它。
TabHost违反了Activity单一窗口的原则,它可以加载多个Activity,并在Activity间进行跳转。
但是TabHost有一个致命缺点就是Back之后就把整个程序退出,而不是返回到上一个Activity。尽管后来我们可以复写OnKeyDown这个方法,但也只是让我们Back到
第一个Activity。
思路:定义TabHost,Xml文件用findviewbyid()的方法,得到Tabhost组件,通过setup()方法实例化进行配置。
TabHost布局:
为了使标题栏在下面,采用相对布局(RelativeLayout);
对标题栏的layout进行配置,:这里应该用LinearLayout布局,但是由于没有找到很好的图片资源,所以只是用了TextView
各个View的布局就不说了,根据需求自己定义。
最后就剩下MainActivity了:
这里重载的SetIndicator(),用来设置标签页。
Public TabHost.TabSpec SetIndicator(View view );
这样就可以自定义View了
本文参考/article/6145635.html 这里可能描述的更加详尽,
它。
TabHost违反了Activity单一窗口的原则,它可以加载多个Activity,并在Activity间进行跳转。
但是TabHost有一个致命缺点就是Back之后就把整个程序退出,而不是返回到上一个Activity。尽管后来我们可以复写OnKeyDown这个方法,但也只是让我们Back到
第一个Activity。
思路:定义TabHost,Xml文件用findviewbyid()的方法,得到Tabhost组件,通过setup()方法实例化进行配置。
TabHost布局:
为了使标题栏在下面,采用相对布局(RelativeLayout);
<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:background="#4F4F4F" android:layout_alignParentBottom="true" > </TabWidget> </RelativeLayout> </TabHost>
对标题栏的layout进行配置,:这里应该用LinearLayout布局,但是由于没有找到很好的图片资源,所以只是用了TextView
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="3dp" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textSize="20dp" android:padding="20dp" android:textColor="@android:color/white"/> </RelativeLayout>
各个View的布局就不说了,根据需求自己定义。
最后就剩下MainActivity了:
package com.example.day04_tabhost_01; import android.app.Activity; import android.app.ActivityGroup; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.Window; import android.widget.ImageView; import android.widget.TabHost; import android.widget.TabHost.TabSpec; import android.widget.TextView; public class MainActivity extends ActivityGroup { private TabHost tabhost; private Class activitys[]={OneActivity.class,TwoActivity.class,ThreeActivity.class,ForeActivity.class}; private String title[]={"SUV","跑车","管理","账户"}; // private int image[]={R.drawable.one_tab,R.drawable.two_tab,R.drawable.three_tab,R.drawable.ic_launcher}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initTabView(); } private void initTabView() { // TODO Auto-generated method stub this.tabhost = (TabHost) this.findViewById(R.id.mytabhost);//实例化TabHost tabhost.setup(this.getLocalActivityManager()); //由于继承了ActivityGroup,所以需要在setup方法里加入此参数,若继承TabActivity则可省略 for(int i=0;i<activitys.length;i++){ View view = View.inflate(this, R.layout.tab_layout, null); //ImageView imagerview = (ImageView) view.findViewById(R.id.image); // imagerview.setImageDrawable(getResources().getDrawable(image[i])); TextView textview = (TextView) view.findViewById(R.id.title); textview.setText(title[i]); Intent intent=new Intent(this, activitys[i]); TabSpec spec=tabhost.newTabSpec(title[i]).setIndicator(view).setContent(intent); tabhost.addTab(spec); } } }
这里重载的SetIndicator(),用来设置标签页。
Public TabHost.TabSpec SetIndicator(View view );
这样就可以自定义View了
本文参考/article/6145635.html 这里可能描述的更加详尽,
相关文章推荐
- UIScrollView
- poj 1458 Common Subsequence【LCS】
- Buildroot用户指南
- 【代码优化】当许多构造函数的参数,请考虑使用builder模式
- 【Android UI】ViewFlipper实现广告轮播图
- poj 1458 Common Subsequence【LCS】
- Snail—UI学习之时间选择器UIDatePicker
- B. Equidistant String
- 在RESTful中,遇到400 Bad Request
- UIPickerView的使用
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理
- UITableView省市区数组
- UITableView
- UITableView
- UI08_TableView界面传值
- PHP 用QueryList抓取网页内容
- UI08_TableView
- POJ 2533 Longest Ordered Subsequence(DP 最长上升子序列)
- iOS UI_电话本
- iOS UI_相册