使用FragmentTabHost实现Tab页
来源:互联网 发布:一个域名成就一个梦想 编辑:程序博客网 时间:2024/06/06 00:20
在这里放一个使用FragmentTabHost实现的Tab页实例,由于自己对Android开发并不十分熟悉,因此无法作出一些详细的讲解,仅仅是个例子。
先放两张例子运行时截取的图片:
MainActivity的布局文件(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <FrameLayout android:id="@+id/fragment" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <android.support.v4.app.FragmentTabHost android:id="@+id/tab_host" android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>
这个布局文件在AndroidStudio中会报异常,不过例子写完整之后运行正常,暂时没有查到原因,AndroidStudio报的错误如下所示:
MainActivity类
package com.tysoft.tab;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentTabHost;import android.view.View;import android.widget.ImageView;import android.widget.TabHost;import android.widget.TextView;import android.widget.Toast;import com.tysoft.tab.fragment.FirstFragment;import com.tysoft.tab.fragment.FourthFragment;import com.tysoft.tab.fragment.SecondFragment;import com.tysoft.tab.fragment.ThirdFragment;import java.util.Arrays;public class MainActivity extends FragmentActivity { private String[] tabIds = {"DASHBOARD", "MESSAGE", "DATA", "SETTING"}; private String[] tabLabels = {"工作台", "消息", "数据", "设置"}; private int[] tabImgs = new int[]{R.drawable.main_tab_dashboard_img, R.drawable.main_tab_message_img, R.drawable.main_tab_data_img, R.drawable.main_tab_setting_img}; private Class[] tabFragmentCls = new Class[]{FirstFragment.class, SecondFragment.class, ThirdFragment.class, FourthFragment.class}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentTabHost fragmentTabHost = (FragmentTabHost) findViewById(R.id.tab_host); fragmentTabHost.setup(this, getSupportFragmentManager(), R.id.fragment); fragmentTabHost.getTabWidget().setDividerDrawable(null); for (int i = 0; i < tabIds.length; i++) { fragmentTabHost.addTab(fragmentTabHost.newTabSpec(tabIds[i]).setIndicator (getTabItemView(i)), tabFragmentCls[i], null); } fragmentTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { @Override public void onTabChanged(String tabId) { Toast.makeText(MainActivity.this, tabId, Toast.LENGTH_LONG).show(); } }); } /** * 给Tab按钮设置图标和文字 */ private View getTabItemView(int index) { View view = getLayoutInflater().inflate(R.layout.main_tab_item, null); ImageView imageView = (ImageView) view.findViewById(R.id.main_tab_img); imageView.setImageResource(tabImgs[index]); TextView textView = (TextView) view.findViewById(R.id.main_tab_label); textView.setText(tabLabels[index]); return view; }}
可以对FragmentTabHost 的TabWidget作一些设置,比如最小高度或者背景等,TabWidget可以通过getTabWidget方法获取,如果下所示:
fragmentTabHost.getTabWidget().setDividerDrawable(null);fragmentTabHost.getTabWidget().setBackgroundResource(R.drawable.ic_new_tab_p);fragmentTabHost.getTabWidget().setMinimumHeight(300);
用到的Fragment(这里只放置了其中一个Fragment的代码,其它几个类似,仅仅内容不同),这里为了简单没有使用XML布局文件,Fragment中的内容都是在代码中生成,仅仅有一个TextView控件。
package com.tysoft.tab.fragment;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.TextView;public class FirstFragment extends Fragment { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LinearLayout linearLayout = new LinearLayout(getActivity()); linearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams .MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); linearLayout.setGravity(Gravity.CENTER); TextView textView = new TextView(getActivity()); textView.setTextSize(30); textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); textView.setText("第一个Fragment"); linearLayout.addView(textView); return linearLayout; }}
Tab页签项布局XML文件
不知为什么FragmentTabHost的Tab页不能放置图片,不符合自己的要求;幸好TabHost.TabSpec类的setIndicator支持自定义的View,因此需要一个自定义的XML布局文件,如下所示
<?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:gravity="center" android:orientation="vertical"> <ImageView android:id="@+id/main_tab_img" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/main_tab_label" android:layout_width="wrap_content" android:layout_height="wrap_content"/></LinearLayout>
Tab页签中ImageView对应XML图片资源文件(仅仅只放一个,其它类似,只是图片不同而已),点击时显示与正常情况下不同的图片
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mipmap/icon_dashboard_pressed" android:state_selected="true"/> <item android:drawable="@mipmap/icon_dashboard"/></selector>
0 0
- 使用FragmentTabHost实现Tab页
- 使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab
- 使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab
- 使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab
- 使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab
- FragmentTabHost实现底部tab切换
- FragmentTabHost实现Fragment的tab效果
- 【Android】FragmentTabHost实现底部Tab菜单选项
- FragmentTabHost实现app底部tab功能
- android上FragmentTabHost实现自定义Tab Indicator
- Android FragmentTabHost实现底部tab切换
- FragmentTabHost+ViewPager+Fragment实现底部Tab导航
- 使用fragmenttabhost实现tab菜单布局(去掉分割线及其布局)
- 使用fragmenttabhost实现tab菜单布局(去掉分割线及其布局)
- FragmentTabHost+Fragment+ViewPager实现内外层嵌套Tab
- FragmentTabHost+Fragment+ViewPager实现内外层嵌套Tab
- Tab形式的菜单实现总结TabHost 和 FragmentTabHost
- Android Tab导航菜单栏--FragmentTabHost+Fragment实现(基础篇)
- ceph存储 FUSE的big_writes与direct_io选项分析
- Choosing a Machine Learning Classifier
- ios设备唯一标识获取策略
- 黑马程序员-----java正则表达式
- SOCKET--tcp粘包分析
- 使用FragmentTabHost实现Tab页
- 设计模式实例-策略模式
- jquery中#的意思
- DNS解析与负载均衡
- [算法第一轮复习] 最短路算法之dijkstra
- 回朔法与动态规划的思考
- 黑马程序员_OC面向对象的三大特性
- 生活杂谈(一)
- poj1087 最大流