用Fragment实现如新浪微博一样的底部菜单的切换
像我这个有强迫症的人来说,自从TabActivity抛弃之后,再使用看到一个个警告和一条条划着的横线,心里很不舒服,现在终于下定决心用Fragment来替换掉TabActivity了!我的研究成果如下:
首先是MainActivity,它需要继承FragmentActivity(这里是指:版本是3.0之前的继承
FragmentActivity,3.0版本之后的继承Activity就可以),对于FragmentActivity的声明周期我就不过多介绍了,
和Activity差不了多少,自己也能弄明白!下边是MainActivity的代码:
- package net.loonggg.fragment;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentActivity;
- import android.support.v4.app.FragmentManager;
- import android.support.v4.app.FragmentTransaction;
- import android.view.Window;
- import android.widget.RadioButton;
- import android.widget.RadioGroup;
- import android.widget.RadioGroup.OnCheckedChangeListener;
- public class MainActivity extends FragmentActivity {
- private Fragment[] mFragments;
- private RadioGroup bottomRg;
- private FragmentManager fragmentManager;
- private FragmentTransaction fragmentTransaction;
- private RadioButton rbOne, rbTwo, rbThree, rbFour;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.activity_main);
- mFragments = new Fragment[3];
- fragmentManager = getSupportFragmentManager();
- mFragments[0] = fragmentManager.findFragmentById(R.id.fragement_main);
- mFragments[1] = fragmentManager.findFragmentById(R.id.fragement_search);
- mFragments[2] = fragmentManager
- .findFragmentById(R.id.fragement_setting);
- fragmentTransaction = fragmentManager.beginTransaction()
- .hide(mFragments[0]).hide(mFragments[1]).hide(mFragments[2]);
- fragmentTransaction.show(mFragments[0]).commit();
- setFragmentIndicator();
- }
- private void setFragmentIndicator() {
- bottomRg = (RadioGroup) findViewById(R.id.bottomRg);
- rbOne = (RadioButton) findViewById(R.id.rbOne);
- rbTwo = (RadioButton) findViewById(R.id.rbTwo);
- rbThree = (RadioButton) findViewById(R.id.rbThree);
- bottomRg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(RadioGroup group, int checkedId) {
- fragmentTransaction = fragmentManager.beginTransaction()
- .hide(mFragments[0]).hide(mFragments[1])
- .hide(mFragments[2]);
- switch (checkedId) {
- case R.id.rbOne:
- fragmentTransaction.show(mFragments[0]).commit();
- break;
- case R.id.rbTwo:
- fragmentTransaction.show(mFragments[1]).commit();
- break;
- case R.id.rbThree:
- fragmentTransaction.show(mFragments[2]).commit();
- break;
- default:
- break;
- }
- }
- });
- }
- }
下边对应的是MainActivity的布局文件activity_main.xml:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/activity_bg"
- android:orientation="vertical" >
- <!-- 上边主页面 -->
- <fragment
- android:id="@+id/fragement_main"
- android:name="net.loonggg.fragment.FragmentMain"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="10" />
- <fragment
- android:id="@+id/fragement_search"
- android:name="net.loonggg.fragment.FragmentSearch"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="10" />
- <fragment
- android:id="@+id/fragement_setting"
- android:name="net.loonggg.fragment.FragmentSetting"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="10" />
- <!-- 底部菜单页面 -->
- <RadioGroup
- android:id="@+id/bottomRg"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="0.5"
- android:background="@drawable/tab_footer_bg"
- android:orientation="horizontal" >
- <RadioButton
- android:id="@+id/rbOne"
- style="@style/rg_btn_style"
- android:checked="true"
- android:drawableTop="@drawable/rb_one_btn_selector"
- android:text="首页" />
- <RadioButton
- android:id="@+id/rbTwo"
- style="@style/rg_btn_style"
- android:drawableTop="@drawable/rb_two_btn_selector"
- android:text="搜索" />
- <RadioButton
- android:id="@+id/rbThree"
- style="@style/rg_btn_style"
- android:drawableTop="@drawable/rb_three_btn_selector"
- android:text="设置" />
- </RadioGroup>
- </LinearLayout>
这里为了大家方便,展示一下项目的布局图:
再下边是要设计的首页界面,它是继承的Fragment,具体看代码:
- package net.loonggg.fragment;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.TextView;
- public class FragmentMain extends Fragment {
- private TextView tv;
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- return inflater.inflate(R.layout.fragment_main, container, false);
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- tv = (TextView) getView().findViewById(R.id.titleTv);
- tv.setText("首页");
- }
- }
接着是对应的布局文件代码fragment_main.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:orientation="vertical" >
- <include
- android:id="@+id/one_title"
- layout="@layout/title_bar" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:gravity="center"
- android:text="这是首页"
- android:textColor="#000000" />
- </LinearLayout>
再接着是:搜索界面的代码:
- package net.loonggg.fragment;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.TextView;
- public class FragmentSearch extends Fragment {
- private TextView tv;
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- return inflater.inflate(R.layout.fragment_search, container, false);
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- tv = (TextView) getView().findViewById(R.id.titleTv);
- tv.setText("搜索");
- }
- @Override
- public void onPause() {
- super.onPause();
- }
- }
如上是对应的布局文件的代码fragment_search.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="wrap_content"
- android:orientation="vertical" >
- <include layout="@layout/title_bar" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:gravity="center"
- android:text="这是搜索界面"
- android:textColor="#000000" />
- </LinearLayout>
紧跟着是:设置界面的代码:
- package net.loonggg.fragment;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.TextView;
- public class FragmentSetting extends Fragment {
- private TextView tv;
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- return inflater.inflate(R.layout.fragment_setting, container, false);
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- tv = (TextView) getView().findViewById(R.id.titleTv);
- tv.setText("设置");
- }
- }
当然一样,下边对应的是设置界面的布局文件代码fragment_setting.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="wrap_content"
- android:orientation="vertical" >
- <include layout="@layout/title_bar" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:gravity="center"
- android:text="这是设置页面"
- android:textColor="#000000" />
- </LinearLayout>
最后是我用的title_bar.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="wrap_content"
- android:background="@drawable/title_bg"
- android:gravity="center"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/titleTv"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:textColor="#ffffff"
- android:textSize="20sp" />
- </LinearLayout>
到这里就基本完成了!!!你会了吗?
用Fragment实现如新浪微博一样的底部菜单的切换的更多相关文章
- Android自己定义TabActivity(实现仿新浪微博底部菜单更新UI)
现在Android上非常多应用都採用底部菜单控制更新的UI这样的框架,比如新浪微博 点击底部菜单的选项能够更新界面.底部菜单能够使用TabHost来实现,只是用过TabHost的人都知道自己定义Tab ...
- 转-Fragment+FragmentTabHost组件(实现新浪微博底部菜单)
http://www.cnblogs.com/lichenwei/p/3985121.html 记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果, ...
- 安卓开发笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)
记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost 之前2篇文章的链接: 安 ...
- [Android] Android 使用 FragmentTabHost + Fragment 实现 微信 底部菜单
Android 使用 FragmentTabHost + Fragment 实现 微信 底部菜单 利用FragmentTabHost实现底部菜单,在该底部菜单中,包括了4个TabSpec,每个TabS ...
- Xamarin.Android 利用Fragment实现底部菜单
效果图: 第一步:添加引用 引用 Crosslight.Xamarin.Android.Support.v7.AppCompat 这个包. 第二步:绘制Main和Fragment界面 fg_home. ...
- Android底部菜单的实现
前言:以前制作菜单使用TabHost,但是android 3.0以上就被废弃了,google已经不建议使这个类了.ActionBar也是菜单,不过在头部,算是导航了 ===本文就介绍怎么制作底部菜单= ...
- Android自定义控件----RadioGroup实现APP首页底部Tab的切换
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- 转-TabHost组件(一)(实现底部菜单导航)
http://www.cnblogs.com/lichenwei/p/3974009.html 什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用wind ...
- Android应用主界面底部菜单实现
介绍 现在绝大多数主流的应用主界面,都会包含一个底部菜单,就拿腾讯的QQ与微信来说,看起来是这样的 <---我是底部菜单 原理 在很久以前,可以通过TabActivity实现相关功能,自从Fr ...
随机推荐
- 如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity
代码的环复杂度(Cyclomatic complexity,有的地方又翻译成圈复杂度)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出. 在软件测试的概念里, ...
- The service command supports only basic LSB actions (start, stop, restart, try-restart, reload,force-reload, status)
# service iptables save The service command supports only basic LSB actions (start, stop, restart, t ...
- 【HHHOJ】ZJOI2019模拟赛(十二)03.03 解题报告
点此进入比赛 得分: \(0+77+20=97\) 排名: \(Rank\ 5\) \(Rating\):\(+46\) \(T1\):[HHHOJ178]依神(点此看题面) 这套题目中的唯一一道传统 ...
- 引用类型(三):Function类型
一. Function类型函数实际上是对象.每个函数都是Function类型都实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象都指针.1.函数通常是使 ...
- Jmeter文件目录,功能简介
1.Jmeter文件目录:1)bin文件: Jmeter启动:bin/jmeter.bat Jmeter日志文件:jmeter.log Linux的启动文件:Jmeter.sh Jmeter系统配置文 ...
- C++STL之set集合容器
set集合容器 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构, 在 插入元素时, 它会自动调整二叉树的排列, 把该元素放到适当的位置, 以确保每个子树根节点的键 ...
- Linux内存管理 - buddy系统
本文目的在于分析Linux内存管理机制中的伙伴系统.内核版本为2.6.31.1. 伙伴系统的概念 在系统运行过程中,经常需要分配一组连续的页,而频繁的申请和释放内存页会导致内存中散布着许多不连续的页, ...
- echarts学习笔记(部分angular及ant-design)
1.在项目中修改ng-zorro组件默认样式的一些方法: 类名等 前加::ng-deep: 类名等 前加:root: 类名等 前加:host /deep/: 2.echarts横轴自定义时间粒度 两种 ...
- l1,l2norm
http://www.chioka.in/differences-between-l1-and-l2-as-loss-function-and-regularization/ 这里分别对l1 loss ...
- MBProgressHUD 优雅地去提示
项目主页: MBProgressHUD 实例下载: 点击下载 快速上手: 当执行需要较长时间的任务时,使用MBProgressHUD最重要的一点是: 保证主线程是空闲的,这样可以使UI实时更新.因此: ...