您的位置:首页 > 产品设计 > UI/UE

【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);

<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 这里可能描述的更加详尽,


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: