Android的FragmentTabHost使用(顶部或底部菜单栏)
2017-01-30 20:38
597 查看
首先给大家拜个年,祝大伙新年快乐!万事如意!
第一种:通过FragmentTabHost+Fragment来实现其点击顶部实现切换页面的效果!**
第一步:编写布局文件
第二步:Activity要继承于FragmentActivity
第三步:添加Tab到TabHost中,且让Tab与 Tab所要显示的内容(fragment)绑定在一起
总结:1>
Tab存在于TabWidget内,而TabWidget是存在于TabHost内。与此同时,
在TabHost内无需在写一个TabWidget,系统已经内置了一个TabWidget
2>关于fragment内容的布局,其位置可以放置在FragmentTabHost外面的上边,里边,或者外边的下边都可以;
当放置在上边时,那么标签是位于底部的;
当放置在里边或者外面的下边时,则此时,标签是位于顶部的;
第二种:通过FragmentTabHost+Fragment来实现其点击底部实现切换页面的效果!**
第一步:activity_main.xml(主布局文件)
第二步:fragment.xml布局((由于只有文字不同,这里只给出一个))
第三步:tabcontent.xml(具体底部菜单详细布局)
第四步:bt_selector.xml(底部菜单点击背景)
第五步:FragmentPage1-FragmentPage5.java
第六步:MainActivity.java(主代码)
第一种:通过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 }
相关文章推荐
- jquery马赛克拼接翻转效果代码分享
- Oracle数据库 DGbroker三种保护模式的切换
- Android中Fragment的解析和使用详解
- 一个Activity中多个Fragment实现沉浸式状态栏的解决方法
- Android Activity与Fragment实现底部导航器
- Android用Fragment创建选项卡
- 详解Android TabHost的多种实现方法 附源码下载
- 一个有趣的SQL命题 用一条语句切换BIT型的真假值
- Winform下实现图片切换特效的方法
- C#实现图片上传与浏览切换的方法
- javascript实现的多个层切换效果通用函数实例
- JS+DIV实现鼠标划过切换层效果的方法
- jquery实现图片左右切换的方法
- JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
- js实现tab选项卡切换功能
- 详解C#切换窗口
- JS实现三个层重叠点击互相切换的方法
- js实现选项卡内容切换以及折叠和展开效果【推荐】
- javascript实现tab响应式切换特效
- JS+CSS实现仿雅虎另类滑动门切换效果