TabHost之外另一种实现选项卡的方式
TabHost实现的时候有几个界面要切换,就需要在XML中写几个,过多时候会显得冗余,用FragmentTabHost在XML文件中只需要一个FrameLayout,不需要在里面写更多的布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@android:id/tabs"/>
</RelativeLayout>
</androidx.fragment.app.FragmentTabHost>
不在XML中写是不写在一起(不都放在FrameLayout里),但是还是要有布局文件。
所以单独写一个XML文件
<?xml version="1.0" encoding="utf-8"?>
<!--选项内容页面的布局文件-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textColor="#008577"/>
</LinearLayout>
FragmentTabHost的写法和TabHost不一样
-
启动 => TabHost直接setup(),FragmentTabHost需要有参数
-
创建内容页面 => TabHost需要一个setContent来指定该选项对应哪个界面,FragmentTabHost不需要
-
添加 => TabHost使用addTabSpec()只有一个参数,FragmentTabHost有三个参数
-
上条其中的第二个参数是个class字节码,java类内实现的最重要的是布局填充
package net.onest.fragmenttabhostch0203;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTabHost;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TabHost;
import android.widget.TextView;
import net.onest.fragmenttabhostch0203.fragment.FirstFragment;
import net.onest.fragmenttabhostch0203.fragment.SecondFragment;
import java.util.HashMap;
import java.