博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fragmentTabHost 使用示例
阅读量:7238 次
发布时间:2019-06-29

本文共 2779 字,大约阅读时间需要 9 分钟。

目前我们看微信的底部,有四个导航栏,那我们应该来怎么实现类似的导航栏呢?

 

在 android 4.0 的时候,推出了一个新的工具,fragmentTabHost 。

fragmentTabHost  可以自己自定义底部的样式,你可以自由添加图标或者文字,都可以。那我们怎么来使用呢?

首先我们来看 MainActivity;

public class MainActivity extends AppCompatActivity {    private FragmentTabHost fragmentTabHost;    private String texts[] = { "首页", "通讯录", "发现", "我", "更多" };    private int imageButton[] = { R.drawable.bt_home_selector,            R.drawable.bt_home_selector, R.drawable.bt_home_selector,R.drawable.bt_home_selector ,R.drawable.bt_home_selector};    private Class fragmentArray[] = {FragmentPage1.class,FragmentPage2.class,FragmentPage3.class,FragmentPage4.class,FragmentPage5.class};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 实例化tabhost        fragmentTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);        fragmentTabHost.setup(this, getSupportFragmentManager(),                R.id.maincontent);        for (int i = 0; i < texts.length; i++) {            TabHost.TabSpec spec=fragmentTabHost.newTabSpec(texts[i]).setIndicator(getView(i));            fragmentTabHost.addTab(spec, fragmentArray[i], null);            //设置背景(必须在addTab之后,由于需要子节点(底部菜单按钮)否则会出现空指针异常)            fragmentTabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.bt_selector);        }    }    private View getView(int i) {        //取得布局实例        View view=View.inflate(MainActivity.this, R.layout.tab_item_view, null);        //取得布局对象        ImageView imageView=(ImageView) view.findViewById(R.id.image);        TextView textView=(TextView) view.findViewById(R.id.text);        //设置图标        imageView.setImageResource(imageButton[i]);        //设置标题        textView.setText(texts[i]);        return view;    }}

 

  • 在 fragmentTabHost.setup 函数中,我们需要传入三个参数,一个是上下文内容Context,一个是FragmentManager,第三个是放置fragment的容器的id;

  • 注意容器必须是 FrameLayout 类型,因为内部定义的类型就是这个。内部会根据id来进行初始化。

  • fragmentTabHost.newTabSpec(texts[i]) 是定义 tag 的,方便后续根据 tag 来查找具体的 fragment。tag 就是 texts[i] 中的值;

  • setIndicator(getView(i)) 是为每一个 fragment 指定一个 view 指示器,这个 view 我们可以自己定义,具体引用就是 getView 函数。

  • addtab 函数则将 fragment 和 tag 联系在一起。

  • 在 getView 中,我们可以自己自定义一个 itemView 来作为 tab 的样式,这个就不具体展开了,看看函数就懂。

然后我们再来简单看看 fragment 怎么写:

public class FragmentPage1 extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater,                             @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        return inflater.inflate(R.layout.fragment_1, null);    }}

 

接下去我们看下具体的布局文件:

首先是整体的布局:

 

接下去是 tab 的itemview 的布局:

 

最后就是fragment 的布局:

 好了,到这里,我们就基本讲完了。

附上源码:

 

转载地址:http://aerfm.baihongyu.com/

你可能感兴趣的文章
cd命令
查看>>
Spark UDF变长参数的二三事儿
查看>>
python学习笔记06-列表
查看>>
linux桌面与命令行模式切换 ②
查看>>
linux中KS详解
查看>>
正则 表达式
查看>>
TCP/IP基础
查看>>
使用Eclipse远程调试Tomcat
查看>>
ansible安装与部署
查看>>
python-M2Crypto安装方法
查看>>
手机写host 工具
查看>>
Android:time&date、TimePicker、DatePicker
查看>>
初始化weblogic密码
查看>>
Linux Top 命令解析
查看>>
一个C#项目 在引用References中有个引用项上有个黄色三角加感叹号 导致报错
查看>>
PPT无法修改默认打开程序的问题
查看>>
2011年度IT博客大赛50强之 jimmy_lixw
查看>>
WP8开发日志(2):MVC设计模式入门
查看>>
windows下配置Nginx1.0.9+php5.2.17
查看>>
咳咳,关于本空间的问题~
查看>>