FragmentTabHost的基本使用(一)

FragmentTabHost,一个很常用的控件。初次接触时,在GOOGLE上找了一些博客,看了些例子,被复杂的结构和很多没接触过的函数弄晕了头。所以自己尝试在那些例子上简化一些,只做FragmentTabHost 最基本的界面功能。

源码下载地址1地址二

 

FragmentTabHost继承的机构

java.lang.Object 

android.view.View

   ↳android.view.ViewGroup

          ↳android.widget.FrameLayout

                   ↳android.widget.TabHost

                            ↳android.support.v4.app.FragmentTabHost

 

 

 

一、项目效果

 

image

 

 

二、项目结构图

image[23]

 

 

三、Main.Xml

FragmentTabHost本身是一个控件,而不是Activity。这个Main.xml是整个Activity需要的。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
<!-- android.support.v4.app.FragmentTabHost 来自android.support.v4.jar的扩展包-->
    <android.support.v4.app.FragmentTabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />
    </android.support.v4.app.FragmentTabHost>

    
    
    <!-- 这个 FrameLayou和上一个 FragmentTabHost 在 xml的位置决定了  界面里 Tab的位置是在上面的 -->
    <FrameLayout
        android:id="@+id/realtabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" />

</LinearLayout>

 

四、三个 Fragment 的界面(这里之贴出一个,另外两个和这个一样。)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <TextView 
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第一个Fragment"
        android:textSize="30sp"/>

</LinearLayout>

 

 

五、主Activity,MainTabActivity.java:

package com.example.thealarmclock;

import com.example.tabhost.FirstFragment;
import com.example.tabhost.SecondFragment;
import com.example.tabhost.ThreeFragment;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTabHost;
import android.view.Window;
import android.widget.TabHost.TabSpec;

public class MainActivity extends FragmentActivity
{

    /**
     * 定义一个 FragmentTabHost
     */

    private FragmentTabHost mTabHost = null;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.layout_main);

        // FragmentTabHost的setup方法
        // public void setup (Context context, FragmentManager manager, int
        // containerId)
        mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); // 这里需要传人的是是Fragment对应的id,getSupportFragmentManager()的方法返回一个FragmentManager

        /*
         * newTabSper传入的参数是String类型的,作用是标签。 setIndicator有三个复写函数
         * 
         * setIndicator(CharSequence label) 指定 "标签" 作为 选项卡的指示器,
         * setIndicator(View view) 指定 一个 View 作为 选项卡的指示器
         * setIndicator(CharSequence label, Drawable icon) 同时指定 标签和 图标 作为
         * 选项卡的指示器。
         * 
         * 这里为了更简单,我只传入了 一个文本。
         * 
         * addTab传人的三个参数, addTab(TabHost.TabSpec tabSpec, Class<?> clss,
         * Bundleargs)
         */
        TabSpec tabSpec = mTabHost.newTabSpec("alarmClock").setIndicator("闹钟");
        mTabHost.addTab(tabSpec, FirstFragment.class, null);

        tabSpec = mTabHost.newTabSpec("stopWatch").setIndicator("秒表");
        mTabHost.addTab(tabSpec, SecondFragment.class, null);

        tabSpec = mTabHost.newTabSpec("timer").setIndicator("计时器");
        mTabHost.addTab(tabSpec, ThreeFragment.class, null);

    }

    protected void onDestroy()
    {
        // TODO Auto-generated method stub
        super.onDestroy();

        // 把mTabHost赋值为null。
        mTabHost = null;
    }
}

 

六、Fragment的界面对应的java FirstFragment.java(另外两个和这个一样。)

package com.example.tabhost;

import com.example.thealarmclock.R;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FirstFragment extends Fragment
{
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {

        //fragment_1,这个java对应的布局文件
        
        return inflater.inflate(R.layout.fragment_1, null);
    }
}

转载于:https://www.cnblogs.com/qq28902581/p/4676005.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值