您的位置:首页 > 移动开发 > Android开发

Android的FragmentTabHost使用(顶部或底部菜单栏)

2017-01-30 20:38 597 查看
首先给大家拜个年,祝大伙新年快乐!万事如意!

第一种:通过FragmentTabHost+Fragment来实现其点击顶部实现切换页面的效果!**

第一步:编写布局文件

<android.support.v4.app.FragmentTabHost
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@android:id/tabhost"
>
<!--
系统要求,具体原因暂时还未追究,不然就会报错
这个FrameLayout并不是显示内容的fragment
且其id必须为tabcontent
-->
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0"/>
</android.support.v4.app.FragmentTabHost>

<!--
用来存放标签所对应的内容,用来显示我们的fragment
若其放置在FragmentTabHost下边,则标签就位于上边,
反之,标签则位于下边
-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/fragment"
>
</FrameLayout>


第二步:Activity要继承于FragmentActivity

/**
* 由于AppCompatActivity继承FragmentActivity
* 所以无需再去继承FragmentActivity
*/
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
.....


第三步:添加Tab到TabHost中,且让Tab与 Tab所要显示的内容(fragment)绑定在一起

mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
/**
* 在setup()里边,其才去获取到TabWidget,所以在此之前,不能直接调用getTabWidget()方法;
*/
mTabHost.setup(this, getSupportFragmentManager(), R.id.fragment);

/**
*addTab:添加标签到TabHost中
* setIndicator:表示设置标签的logo
*/
mTabHost.addTab(mTabHost.newTabSpec("blue").setIndicator("blue"),
BlueFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("orange").setIndicator("orange"),
OrangeFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("green").setIndicator("green"),
GreenFragment.class, null);


总结:1>

Tab存在于TabWidget内,而TabWidget是存在于TabHost内。与此同时,

在TabHost内无需在写一个TabWidget,系统已经内置了一个TabWidget

2>关于fragment内容的布局,其位置可以放置在FragmentTabHost外面的上边,里边,或者外边的下边都可以;

当放置在上边时,那么标签是位于底部的;

当放置在里边或者外面的下边时,则此时,标签是位于顶部的;

第二种:通过FragmentTabHost+Fragment来实现其点击底部实现切换页面的效果!**

第一步:activity_main.xml(主布局文件)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2     xmlns:tools="http://schemas.android.com/tools"
3     android:layout_width="fill_parent"
4     android:layout_height="fill_parent"
5     android:orientation="vertical" >
6
7     <!-- 存放主要页面内容 -->
8
9     <FrameLayout
10         android:id="@+id/maincontent"
11         android:layout_width="fill_parent"
12         android:layout_height="0dp"
13         android:layout_weight="1" >
14     </FrameLayout>
15
16     <!-- 底层菜单 -->
17
18     <android.support.v4.app.FragmentTabHost
19         android:id="@android:id/tabhost"
20         android:layout_width="fill_parent"
21         android:layout_height="wrap_content"
22         android:background="@drawable/maintab_toolbar_bg" >
23
24         <FrameLayout
25             android:id="@android:id/tabcontent"
26             android:layout_width="0dp"
27             android:layout_height="0dp"
28             android:layout_weight="0" >
29         </FrameLayout>
30     </android.support.v4.app.FragmentTabHost>
31
32 </LinearLayout>


第二步:fragment.xml布局((由于只有文字不同,这里只给出一个))

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2     xmlns:tools="http://schemas.android.com/tools"
3     android:layout_width="fill_parent"
4     android:layout_height="fill_parent"
5  >
6
7
8     <TextView
9         android:id="@+id/text"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:layout_centerInParent="true"
13         android:text="我是第一个Fragment"
14         android:textSize="20dp"
15         />
18 </RelativeLayout>


第三步:tabcontent.xml(具体底部菜单详细布局)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2     xmlns:tools="http://schemas.android.com/tools"
3     android:layout_width="wrap_content"
4     android:layout_height="wrap_content"
5     android:gravity="center_horizontal"
6     android:orientation="vertical" >
7
8     <ImageView
9         android:id="@+id/image"
10         android:layout_height="wrap_content"
11         android:layout_width="wrap_content"
12         />
13     <TextView
14         android:id="@+id/text"
15         android:padding="2dp"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:textColor="@android:color/white"
19         />
22 </LinearLayout>


第四步:bt_selector.xml(底部菜单点击背景)

<?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3
4     <item android:drawable="@drawable/home_btn_bg" android:state_pressed="true"></item>
5     <item android:drawable="@drawable/home_btn_bg" android:state_selected="true"></item>
7 </selector>


第五步:FragmentPage1-FragmentPage5.java

public class FragmentPage1 extends Fragment{
11         @Override
12         public View onCreateView(LayoutInflater inflater,
13                 @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
14             return inflater.inflate(R.layout.fragment1, null);
15         }
16
17 }


第六步:MainActivity.java(主代码)

public class MainActivity extends FragmentActivity {
12
13     private FragmentTabHost fragmentTabHost;
14     private String texts[] = { "首页", "消息", "好友", "广场", "更多" };
15     private int imageButton[] = { R.drawable.bt_home_selector,
16             R.drawable.bt_message_selector, R.drawable.bt_selfinfo_selector,R.drawable.bt_square_selector ,R.drawable.bt_more_selector};
17      private Class fragmentArray[] = {FragmentPage1.class,FragmentPage2.class,FragmentPage3.class,FragmentPage4.class,FragmentPage5.class};
18
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23
24         // 实例化tabhost
25         fragmentTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
26         fragmentTabHost.setup(this, getSupportFragmentManager(),
27                 R.id.maincontent);
28
29         for (int i = 0; i < texts.length; i++) {
30             TabSpec spec=fragmentTabHost.newTabSpec(texts[i]).setIndicator(getView(i));
31
32             fragmentTabHost.addTab(spec, fragmentArray[i], null);
33
34             //设置背景(必须在addTab之后,由于需要子节点(底部菜单按钮)否则会出现空指针异常)
35             fragmentTabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.bt_selector);
36         }
37
38     }
39
40     private View getView(int i) {
41         //取得布局实例
42         View view=View.inflate(MainActivity.this, R.layout.tabcontent, null);
43
44         //取得布局对象
45         ImageView imageView=(ImageView) view.findViewById(R.id.image);
46         TextView textView=(TextView) view.findViewById(R.id.text);
47
48         //设置图标
49         imageView.setImageResource(imageButton[i]);
50         //设置标题
51         textView.setText(texts[i]);
52         return view;
53     }
55 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  TabHost fragment 切换