纵观现在大部分Android客户端界面框架基本都是TitleBar+内容区域+TabBar的模式。其中TabBar用来切换对应的内容区域。

今天我们用Fragment的方式实现Tab的切换

不多说~上图:


点击底部的Tab,中间的Fragment内容区域就会相应的切换。

这里的Fragment只是简单的显示一个TextView。


Title的布局title_ui.xml:

<?xml version="1.0" encoding="utf-8"?>        


Tab的布局tab_ui.xml:

<?xml version="1.0" encoding="utf-8"?>                                                                                                

主界面布局:

                    


Fragment代码(其中之一,其他都一样):

package com.example.tabfragment;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class FragmenAddr extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_addrs, container, false);return view;}}

主Activity代码:

package com.example.tabfragment;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.ImageView;import android.widget.LinearLayout;public class MainActivity extends FragmentActivity implements OnClickListener {private LinearLayout layoutTab01;//Tab四个按钮之一private LinearLayout layoutTab02;private LinearLayout layoutTab03;private LinearLayout layoutTab04;private ImageView imageView01;//Tab图片private ImageView imageView02;private ImageView imageView03;private ImageView imageView04;private FragmentManager manager;private FragmentTransaction transaction;private FragmenWeixin weixin;//内容区域private FragmenAddr addr;private FragmenSetting setting;private FragmenFriend friend;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initView();initEvent();setSelect(0);}private void setSelect(int i) {clearImageView();manager = getSupportFragmentManager();transaction = manager.beginTransaction();hideFragment(transaction);switch (i) {case 0:imageView01.setImageResource(R.drawable.tab_weixin_pressed);if(weixin == null){weixin = new FragmenWeixin();transaction.add(R.id.fragment_ui,weixin);}else {transaction.show(weixin);}break;case 1:imageView02.setImageResource(R.drawable.tab_address_pressed);if(addr == null){addr = new FragmenAddr();transaction.add(R.id.fragment_ui,addr);}else {transaction.show(addr);}break;case 2:imageView03.setImageResource(R.drawable.tab_settings_pressed);if(setting == null){setting = new FragmenSetting();transaction.add(R.id.fragment_ui,setting);}else {transaction.show(setting);}break;case 3:imageView04.setImageResource(R.drawable.tab_find_frd_pressed);if(friend == null){friend = new FragmenFriend();transaction.add(R.id.fragment_ui,friend);}else {transaction.show(friend);}break;default:break;}transaction.commit();}private void hideFragment(FragmentTransaction transaction2) {// TODO Auto-generated method stubif(weixin != null){transaction2.hide(weixin);}if(addr != null){transaction2.hide(addr);}if(setting != null){transaction2.hide(setting);}if(friend != null){transaction2.hide(friend);}}private void clearImageView() {imageView01.setImageResource(R.drawable.tab_weixin_normal);imageView02.setImageResource(R.drawable.tab_address_normal);imageView03.setImageResource(R.drawable.tab_settings_normal);imageView04.setImageResource(R.drawable.tab_find_frd_normal);}private void initEvent() {layoutTab01.setOnClickListener(this);layoutTab02.setOnClickListener(this);layoutTab03.setOnClickListener(this);layoutTab04.setOnClickListener(this);}private void initView() {layoutTab01 = (LinearLayout) findViewById(R.id.tab01);layoutTab02 = (LinearLayout) findViewById(R.id.tab02);layoutTab03 = (LinearLayout) findViewById(R.id.tab03);layoutTab04 = (LinearLayout) findViewById(R.id.tab04);imageView01 = (ImageView) findViewById(R.id.tabImage01);imageView02 = (ImageView) findViewById(R.id.tabImage02);imageView03 = (ImageView) findViewById(R.id.tabImage03);imageView04 = (ImageView) findViewById(R.id.tabImage04);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.tab01:setSelect(0);break;case R.id.tab02:setSelect(1);break;case R.id.tab03:setSelect(2);break;case R.id.tab04:setSelect(3);break;default:break;}}}

主要流程:点击Tab中的按钮,将该按钮的ImageView颜色变为选中状态,同时切换相应的Fragment。


此方法使用了目前较推荐的Fragment,减少了代码的耦合程度。下一篇将介绍Tab切换的另一种方法,利用ViewPager+FragmentPageAdapter的方式实现Tab的切换

更多相关文章

  1. Android布局常用控件
  2. Android视图绘制流程解析(二)
  3. Android界面布局大集合(Fragment+ViewPager)
  4. Android基本数据存储方法
  5. 第28章、列表视图ListView之一(从零开始学Android)
  6. android HorizontalScrollView替代Gallery
  7. Android——“i分享”APP开发Day11
  8. Android:自定义DialogFragment的内容和按钮
  9. android 访问/assets 和/res目录下文件的方法

随机推荐

  1. 给你一个理由学习Linux,树莓派4免费送
  2. 一文看懂分布式数据库原理和 PostgreSQL
  3. Docker+k8s 容器云建设中 10 个常见难点
  4. Linux 运维需要掌握的 17 个实用技巧
  5. 1/4的活跃用户在18岁以下,我想和你们聊聊
  6. 系统性能测试与监测工具汇总
  7. 分布式存储到底需不需要备份?
  8. 脱离业务模型的基础架构没有灵魂,金融行业
  9. 生活中总免不了毒打和挫折,但我希望你能再
  10. SaltStack 工作原理及安装配置实例详解 |