我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android UI实现底部切换标签fragment

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android UI实现底部切换标签fragment

本篇博客要分享的一个UI效果——实现底部切换标签,想必大家在一些应用上面遇到过这种效果了,最典型的就是微信了,可以左右滑动切换页面,也可以点击标签页滑动页面,它们是如何实现的呢,本篇博客为了简单只介绍如何实现点击底部切换标签页。

先来看看我们想实现的效果图: 


 

这样的页面实现起来其实很简单的,首先我们从布局入手:
 分为三部分
 第一部分:顶部导航栏布局
 第二部分:中部显示内容布局
 第三部分:底部标签布局

 /BottomTabDemo/res/layout/activity_main.xml


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" > 
 <RelativeLayout 
  android:id="@+id/rl_main" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" > 
  <!-- 顶部 --> 
  <RelativeLayout 
   android:id="@+id/top_tab" 
   android:layout_width="match_parent" 
   android:layout_height="50dip" 
   android:background="@color/topbar_bg" > 
   <ImageView 
    android:id="@+id/iv_logo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:focusable="false" 
    android:class="lazy" data-src="@drawable/zhidao_logo" 
    android:contentDescription="@null" /> 
  </RelativeLayout> 
  <!-- 底部tab --> 
  <LinearLayout 
   android:id="@+id/ll_bottom_tab" 
   android:layout_width="match_parent" 
   android:layout_height="54dp" 
   android:layout_alignParentBottom="true" 
   android:gravity="center_vertical" 
   android:orientation="horizontal" 
   android:baselineAligned="true"> 
   <RelativeLayout 
    android:id="@+id/rl_know" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1.0" > 
    <ImageView 
     android:id="@+id/iv_know" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:class="lazy" data-src="@drawable/btn_know_nor" 
     android:contentDescription="@null"/> 
    <TextView 
     android:id="@+id/tv_know" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/iv_know" 
     android:layout_centerHorizontal="true" 
     android:text="@string/bottom_tab_know" 
     android:textColor="@color/bottomtab_normal" 
     android:textSize="12sp" /> 
   </RelativeLayout> 
   <RelativeLayout 
    android:id="@+id/rl_want_know" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1.0" > 
    <ImageView 
     android:id="@+id/iv_i_want_know" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:class="lazy" data-src="@drawable/btn_wantknow_nor" 
     android:contentDescription="@null" /> 
    <TextView 
     android:id="@+id/tv_i_want_know" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/iv_i_want_know" 
     android:layout_centerHorizontal="true" 
     android:text="@string/bottom_tab_wantknow" 
     android:textColor="@color/bottomtab_normal" 
     android:textSize="12sp" /> 
   </RelativeLayout> 
   <RelativeLayout 
    android:id="@+id/rl_me" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1.0" > 
    <ImageView 
     android:id="@+id/iv_me" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:class="lazy" data-src="@drawable/btn_my_nor" 
     android:contentDescription="@null" /> 
    <TextView 
     android:id="@+id/tv_me" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/iv_me" 
     android:layout_centerHorizontal="true" 
     android:text="@string/bottom_tab_my" 
     android:textColor="@color/bottomtab_normal" 
     android:textSize="12sp" /> 
   </RelativeLayout> 
  </LinearLayout> 
  <!-- 内容部分, fragment切换 --> 
  <LinearLayout 
   android:id="@+id/content_layout" 
   android:layout_width="match_parent" 
   android:layout_height="match_parent" 
   android:layout_above="@+id/line" 
   android:layout_below="@+id/top_tab" 
   android:orientation="vertical" > 
  </LinearLayout> 
  <View 
   android:id="@+id/line" 
   android:layout_width="match_parent" 
   android:layout_height="1dp" 
   android:layout_above="@id/ll_bottom_tab" 
   android:background="@color/line" /> 
 </RelativeLayout> 
</FrameLayout> 

以上是布局代码,下面就介绍如何通过点击标签切换Fragment:
我们会发现,初始的时候是选中第一个标签页,图片和字体的颜色区别于另外两个标签页,所以我们要做的就是切换标签的时候,就改变标签的状态
主要改两个内容:

图片 文字颜色

然后我们切换标签显示的是不同的Fragment,这里我们有三个Fragment,所以我们定义三个不同的Fragment界面:
/BottomTabDemo/class="lazy" data-src/com/xiaowu/bottomtab/demo/ZhidaoFragment.java
/BottomTabDemo/class="lazy" data-src/com/xiaowu/bottomtab/demo/IWantKnowFragment.java
/BottomTabDemo/class="lazy" data-src/com/xiaowu/bottomtab/demo/MeFragment.java

每个Fragment对应不同的布局文件:
/BottomTabDemo/res/layout/main_tab1_fragment.xml
/BottomTabDemo/res/layout/main_tab2_fragment.xml
/BottomTabDemo/res/layout/main_tab3_fragment.xml

ok,这些定义好之后,我们就在主界面上编写切换的代码了,如何对Fragment进行切换呢,定义以下方法:


 
 private void addOrShowFragment(FragmentTransaction transaction, 
   Fragment fragment) { 
  if (currentFragment == fragment) 
   return; 
  if (!fragment.isAdded()) { // 如果当前fragment未被添加,则添加到Fragment管理器中 
   transaction.hide(currentFragment) 
     .add(R.id.content_layout, fragment).commit(); 
  } else { 
   transaction.hide(currentFragment).show(fragment).commit(); 
  } 
  currentFragment = fragment; 
 } 

完整代码如下:
/BottomTabDemo/class="lazy" data-src/com/xiaowu/bottomtab/demo/MainActivity.java 


package com.xiaowu.bottomtab.demo; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 
 
public class MainActivity extends FragmentActivity implements OnClickListener { 
 // 三个tab布局 
 private RelativeLayout knowLayout, iWantKnowLayout, meLayout; 
 // 底部标签切换的Fragment 
 private Fragment knowFragment, iWantKnowFragment, meFragment, 
   currentFragment; 
 // 底部标签图片 
 private ImageView knowImg, iWantKnowImg, meImg; 
 // 底部标签的文本 
 private TextView knowTv, iWantKnowTv, meTv; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
  initUI(); 
  initTab(); 
 } 
  
 private void initUI() { 
  knowLayout = (RelativeLayout) findViewById(R.id.rl_know); 
  iWantKnowLayout = (RelativeLayout) findViewById(R.id.rl_want_know); 
  meLayout = (RelativeLayout) findViewById(R.id.rl_me); 
  knowLayout.setOnClickListener(this); 
  iWantKnowLayout.setOnClickListener(this); 
  meLayout.setOnClickListener(this); 
  knowImg = (ImageView) findViewById(R.id.iv_know); 
  iWantKnowImg = (ImageView) findViewById(R.id.iv_i_want_know); 
  meImg = (ImageView) findViewById(R.id.iv_me); 
  knowTv = (TextView) findViewById(R.id.tv_know); 
  iWantKnowTv = (TextView) findViewById(R.id.tv_i_want_know); 
  meTv = (TextView) findViewById(R.id.tv_me); 
 } 
  
 private void initTab() { 
  if (knowFragment == null) { 
   knowFragment = new ZhidaoFragment(); 
  } 
  if (!knowFragment.isAdded()) { 
   // 提交事务 
   getSupportFragmentManager().beginTransaction() 
     .add(R.id.content_layout, knowFragment).commit(); 
   // 记录当前Fragment 
   currentFragment = knowFragment; 
   // 设置图片文本的变化 
   knowImg.setImageResource(R.drawable.btn_know_pre); 
   knowTv.setTextColor(getResources() 
     .getColor(R.color.bottomtab_press)); 
   iWantKnowImg.setImageResource(R.drawable.btn_wantknow_nor); 
   iWantKnowTv.setTextColor(getResources().getColor( 
     R.color.bottomtab_normal)); 
   meImg.setImageResource(R.drawable.btn_my_nor); 
   meTv.setTextColor(getResources().getColor(R.color.bottomtab_normal)); 
  } 
 } 
 @Override 
 public void onClick(View view) { 
  switch (view.getId()) { 
  case R.id.rl_know: // 知道 
   clickTab1Layout(); 
   break; 
  case R.id.rl_want_know: // 我想知道 
   clickTab2Layout(); 
   break; 
  case R.id.rl_me: // 我的 
   clickTab3Layout(); 
   break; 
  default: 
   break; 
  } 
 } 
  
 private void clickTab1Layout() { 
  if (knowFragment == null) { 
   knowFragment = new ZhidaoFragment(); 
  } 
  addOrShowFragment(getSupportFragmentManager().beginTransaction(), knowFragment); 
  // 设置底部tab变化 
  knowImg.setImageResource(R.drawable.btn_know_pre); 
  knowTv.setTextColor(getResources().getColor(R.color.bottomtab_press)); 
  iWantKnowImg.setImageResource(R.drawable.btn_wantknow_nor); 
  iWantKnowTv.setTextColor(getResources().getColor( 
    R.color.bottomtab_normal)); 
  meImg.setImageResource(R.drawable.btn_my_nor); 
  meTv.setTextColor(getResources().getColor(R.color.bottomtab_normal)); 
 } 
  
 private void clickTab2Layout() { 
  if (iWantKnowFragment == null) { 
   iWantKnowFragment = new IWantKnowFragment(); 
  } 
  addOrShowFragment(getSupportFragmentManager().beginTransaction(), iWantKnowFragment); 
  knowImg.setImageResource(R.drawable.btn_know_nor); 
  knowTv.setTextColor(getResources().getColor(R.color.bottomtab_normal)); 
  iWantKnowImg.setImageResource(R.drawable.btn_wantknow_pre); 
  iWantKnowTv.setTextColor(getResources().getColor( 
    R.color.bottomtab_press)); 
  meImg.setImageResource(R.drawable.btn_my_nor); 
  meTv.setTextColor(getResources().getColor(R.color.bottomtab_normal)); 
 } 
  
 private void clickTab3Layout() { 
  if (meFragment == null) { 
   meFragment = new MeFragment(); 
  } 
  addOrShowFragment(getSupportFragmentManager().beginTransaction(), meFragment); 
  knowImg.setImageResource(R.drawable.btn_know_nor); 
  knowTv.setTextColor(getResources().getColor(R.color.bottomtab_normal)); 
  iWantKnowImg.setImageResource(R.drawable.btn_wantknow_nor); 
  iWantKnowTv.setTextColor(getResources().getColor( 
    R.color.bottomtab_normal)); 
  meImg.setImageResource(R.drawable.btn_my_pre); 
  meTv.setTextColor(getResources().getColor(R.color.bottomtab_press)); 
 } 
  
 private void addOrShowFragment(FragmentTransaction transaction, 
   Fragment fragment) { 
  if (currentFragment == fragment) 
   return; 
  if (!fragment.isAdded()) { // 如果当前fragment未被添加,则添加到Fragment管理器中 
   transaction.hide(currentFragment) 
     .add(R.id.content_layout, fragment).commit(); 
  } else { 
   transaction.hide(currentFragment).show(fragment).commit(); 
  } 
  currentFragment = fragment; 
 } 
} 

源码下载:http://xiazai.jb51.net/201612/yuanma/AndroidBottomTab(jb51.net).rar

您可能感兴趣的文章:Android仿新闻顶部导航标签切换效果PagerSlidingTabStrip制作Android带标签的多界面滑动切换Android中使用TagFlowLayout制作动态添加删除标签Android自定义ViewGroup实现标签浮动效果Android实现底部切换标签


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android UI实现底部切换标签fragment

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android UI实现底部切换标签fragment

本篇博客要分享的一个UI效果——实现底部切换标签,想必大家在一些应用上面遇到过这种效果了,最典型的就是微信了,可以左右滑动切换页面,也可以点击标签页滑动页面,它们是如何实现的呢,本篇博客为了简单只介绍如何实现点击底部切换标签页。先来看看我们
2022-06-06

Android如何实现底部图标与Fragment

这篇文章主要介绍了Android如何实现底部图标与Fragment,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果如下:1.首先在res下的drawable下新建四个图标的
2023-05-31

Android Activity与Fragment实现底部导航器

单Activity多Fragment实现底部导航器 最近由于Android基础知识讲解需要,采用单Activity多Fragment实现类似QQ底部导航器示例,这种开发模式广泛应用于App开发,比如QQ,微信,新浪等,关于Android底部
2022-06-06

android中Fragment+RadioButton实现底部导航栏

在App中经常看到这样的tab底部导航栏那么这种效果是如何实现,实现的方式有很多种,最常见的就是使用Fragment+RadioButton去实现。下面我们来写一个例子 首先我们先在activity_mian.xml定义布局,整个布局的外面
2022-06-06

Android-实现切换Fragment页功能的实现代码

场景:使用Fragment实现切页。类结构:一:ActivityActivity中使用getSupportFragmentManager().beginTransaction()来填充一个Fragment(管理用的FragmentA)Act
2022-06-06

Android利用碎片fragment实现底部标题栏(Github模板开源)

fragment特点Fragment与Activity相似,有自己的生命周期,布局。相当于一个迷你的ActivityFragment可以作为Activity的组成部分,一个Activity可以有多个Fragment一个Fragment可以
2022-06-06

Android仿新闻顶部导航标签切换效果

最近由于个人兴趣原因,写了个模仿新闻顶部导航标签的demo。具体看下图。那么大致上我们会用到这些知识。 1.Fragment 2.FragmentPagerAdapter 3.HorizontalScrollView 4.PopupWind
2022-06-06

Android仿微信底部实现Tab选项卡切换效果

在网上看了比较多的关于Tab的教程,发现都很杂乱。比较多的用法是用TitlePagerTabStrip和ViewPaper。不过TitlePagerTabStrip有个很大的缺陷,Tab里面的内容刚进去是没有的,要滑一次才能加载出来。而且滑
2022-06-06

Android实现简单底部导航栏 Android仿微信滑动切换效果

Android仿微信滑动切换最终实现效果:大体思路:1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标;2. 底部导航栏的设置方法类似于TabLayout的关联,Vi
2023-05-30

Android App中使用ViewPager+Fragment实现滑动切换效果

在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,但是使用ViewPager也有弊端:需要导入android-support-v4.jar、细节无法控
2022-06-06

Android程序开发之Fragment实现底部导航栏实例代码

流行的应用的导航一般分为两种,一种是底部导航,一种是侧边栏。 说明 IDE:AS,Android studio; 模拟器:genymotion; 实现的效果,见下图。具体实现 为了讲明白这个实现过程,我们贴出来的代码多一写,这样更方便理解
2022-06-06

Android中Fragment相互切换间不被回收的实现方法

前言Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当
2023-05-30

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录