Android-实现底部切换标签(fragment)
2016-02-27 10:13
323 查看
本篇讨论实现底部标签切换
话不多说,先上效果图
![](http://img.blog.csdn.net/20160227102156061)
具体实现步骤,首先布局文件设计好下方标签,上方标题等内容。需要准备的内容为:图片素材,分2种(点击状态的和未点击状态)。布局代码如下
布局设计好以后,就是实现activity,activity的实现主要是点击的简体OnClickListener,为每个标签加监听,实现标签图片状态的改变,以及显示相应的fragment。代码如下
到此,标签切换就实现了,是不是很简单?
话不多说,先上效果图
具体实现步骤,首先布局文件设计好下方标签,上方标题等内容。需要准备的内容为:图片素材,分2种(点击状态的和未点击状态)。布局代码如下
<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: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_home" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.0" > <ImageView android:id="@+id/iv_home" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:src="@drawable/index" android:contentDescription="@null"/> <TextView android:id="@+id/tv_home" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/iv_home" android:layout_centerHorizontal="true" android:text="@string/bottom_tab_home" android:textColor="@color/bottomtab_normal" android:textSize="12sp" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_find" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.0" > <ImageView android:id="@+id/iv_find" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:src="@drawable/nav_find" android:contentDescription="@null" /> <TextView android:id="@+id/tv_find" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/iv_find" android:layout_centerHorizontal="true" android:text="@string/bottom_tab_find" 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:src="@drawable/nav_my" 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>
布局设计好以后,就是实现activity,activity的实现主要是点击的简体OnClickListener,为每个标签加监听,实现标签图片状态的改变,以及显示相应的fragment。代码如下
package com.corn.platform.activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.corn.platform.R; import com.corn.platform.fragment.FindFragment; import com.corn.platform.fragment.HomePageFragment; import com.corn.platform.fragment.MeFragment; import com.corn.platform.lua.RootUtil; import java.io.DataOutputStream; public class MainActivity extends FragmentActivity implements View.OnClickListener { // 三个tab布局 private RelativeLayout homeLayout, findLayout, meLayout; // 底部标签切换的Fragment private Fragment homeFragment, findFragment, meFragment, currentFragment; // 底部标签图片 private ImageView homeImg, findImg, meImg; // 底部标签的文本 private TextView homeTv, findTv, meTv; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); initTab(); } /** * 初始化UI */ private void initUI() { homeLayout = (RelativeLayout) findViewById(R.id.rl_home); findLayout = (RelativeLayout) findViewById(R.id.rl_find); meLayout = (RelativeLayout) findViewById(R.id.rl_me); homeLayout.setOnClickListener(this); findLayout.setOnClickListener(this); meLayout.setOnClickListener(this); homeImg = (ImageView) findViewById(R.id.iv_home); findImg = (ImageView) findViewById(R.id.iv_find); meImg = (ImageView) findViewById(R.id.iv_me); homeTv = (TextView) findViewById(R.id.tv_home); findTv = (TextView) findViewById(R.id.tv_find); meTv = (TextView) findViewById(R.id.tv_me); } /** * 初始化底部标签 */ private void initTab() { if (homeFragment == null) { homeFragment = new HomePageFragment(); } if (!homeFragment.isAdded()) { // 提交事务 getSupportFragmentManager().beginTransaction() .add(R.id.content_layout, homeFragment).commit(); // 记录当前Fragment currentFragment = homeFragment; // 设置图片文本的变化 homeImg.setImageResource(R.drawable.index_hover); homeTv.setTextColor(getResources() .getColor(R.color.bottomtab_press)); findImg.setImageResource(R.drawable.nav_find); findTv.setTextColor(getResources().getColor( R.color.bottomtab_normal)); meImg.setImageResource(R.drawable.nav_my); meTv.setTextColor(getResources().getColor(R.color.bottomtab_normal)); } } @Override public void onClick(View view) { switch (view.getId()) { case R.id.rl_home: // 知道 clickTab1Layout(); break; case R.id.rl_find: // 我想知道 clickTab2Layout(); break; case R.id.rl_me: // 我的 clickTab3Layout(); break; default: break; } } /** * 点击第一个tab */ private void clickTab1Layout() { if (homeFragment == null) { homeFragment = new HomePageFragment(); } addOrShowFragment(getSupportFragmentManager().beginTransaction(), homeFragment); // 设置底部tab变化 homeImg.setImageResource(R.drawable.index_hover); homeTv.setTextColor(getResources().getColor(R.color.bottomtab_press)); findImg.setImageResource(R.drawable.nav_find); findTv.setTextColor(getResources().getColor( R.color.bottomtab_normal)); meImg.setImageResource(R.drawable.nav_my); meTv.setTextColor(getResources().getColor(R.color.bottomtab_normal)); } /** * 点击第二个tab */ private void clickTab2Layout() { if (findFragment == null) { findFragment = new FindFragment(); } addOrShowFragment(getSupportFragmentManager().beginTransaction(), findFragment); homeImg.setImageResource(R.drawable.index); homeTv.setTextColor(getResources().getColor(R.color.bottomtab_normal)); findImg.setImageResource(R.drawable.nav_find_hover); findTv.setTextColor(getResources().getColor( R.color.bottomtab_press)); meImg.setImageResource(R.drawable.nav_my); meTv.setTextColor(getResources().getColor(R.color.bottomtab_normal)); } /** * 点击第三个tab */ private void clickTab3Layout() { if (meFragment == null) { meFragment = new MeFragment(); } addOrShowFragment(getSupportFragmentManager().beginTransaction(), meFragment); homeImg.setImageResource(R.drawable.index); homeTv.setTextColor(getResources().getColor(R.color.bottomtab_normal)); findImg.setImageResource(R.drawable.nav_find); findTv.setTextColor(getResources().getColor( R.color.bottomtab_normal)); meImg.setImageResource(R.drawable.nav_my_hover); meTv.setTextColor(getResources().getColor(R.color.bottomtab_press)); } /** * 添加或者显示碎片 * * @param transaction * @param fragment */ private void addOrShowFragment(android.support.v4.app.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; }
到此,标签切换就实现了,是不是很简单?
相关文章推荐
- 详解Android中AsyncTask的使用
- android管理SD卡 mksdcard
- Android 中的DisplayMetrics类的用法
- android 打造变化多端的SeekBar(垂直和水平)
- xamarin.forms 版本自动更新(针对android)
- android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)
- Android 最火的快速开发框架XUtils
- Android如何定制化自己的开关机动画、开关机铃声
- android 让TextView自带滚动条
- Android本地数据安全尝试(中)——Conceal
- 浅谈Android App开发中Fragment的创建与生命周期
- android开发 不注意的异常
- Android如何查看应用签名信息
- Android.mk的一些FAQ
- 应用开机启动及相关文档翻译
- Android不规则瀑布流照片墙的实现+LruCache算法
- 个人进阶之路——自定义控件(5)
- android 8种对话框(Dialog)使用方法汇总
- Android Resources$NotFoundException异常
- android第一个项目-计算你的生存日子之年龄计算器