仿QQ底部切换(Fragment + Radio)
第一步: activity_main.xml 布局文件
<RelativeLayout 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" > //activity_main.xml <FrameLayout
android:id="@+id/frame_container" //主内容的区域
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/div_view" >
</FrameLayout> <View
android:id="@+id/div_view"
android:layout_width="fill_parent"
android:layout_height="1.0px"
android:layout_above="@+id/main_radiogroup" //横线 在radiogroup的上面
android:layout_marginBottom="2dip"
android:background="#ffc9cacb" /> <RadioGroup
android:id="@+id/main_radiogroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" //在父布局 的下面
android:orientation="horizontal" > <RadioButton
android:id="@+id/tab_rbo_question"
style="@style/tab_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" //占 一
android:background="@null"
android:button="@null"
android:checked="true" // 默认选中
android:drawableTop="@drawable/selector_tab_question" //"问他" 图片的选择器
android:text="问他"
android:textColor="@color/tv_checked_bg" /> <RadioButton
android:id="@+id/tab_rbo_message"
style="@style/tab_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:button="@null"
android:drawableTop="@drawable/selector_tab_message" // "消息" 图片选择器
android:gravity="center_horizontal" //居中
android:text="消息" /> <RadioButton
android:id="@+id/tab_rbo_answer"
style="@style/tab_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:button="@null"
android:drawableTop="@drawable/selector_tab_answer" //"我要回答" 图片选择器器
android:gravity="center_horizontal"
android:text="我要回答" /> <RadioButton
android:id="@+id/tab_rbo_discover"
style="@style/tab_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:button="@null"
android:drawableTop="@drawable/selector_tab_discover" //"发现" 图片选择器
android:gravity="center_horizontal"
android:text="发现" /> <RadioButton
android:id="@+id/tab_rbo_user"
style="@style/tab_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:button="@null"
android:drawableTop="@drawable/selector_tab_user" //"我" 图片选择器
android:gravity="center_horizontal"
android:text="我" />
</RadioGroup> </RelativeLayout>
drawable目录下 selector_tab_question.xml(" 问他"选择器)
<?xml version="1.0" encoding="utf-8"?> //selector_tab_question
<selector xmlns:android="http://schemas.android.com/apk/res/android"
<item android:drawable="@drawable/tab_question_select" android:state_checked="true"></item>
<item android:drawable="@drawable/tab_question_select" android:state_pressed="true"></item>
<item android:drawable="@drawable/tab_question_nor"></item>
</selector>
.... 其他几个选择器 也一样
style.xml 下 name ="tab_textview"
<style name="tab_textview">
<item name="android:textSize">11sp</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:drawablePadding">2dip</item>
</style>
第二步 MainActivity.java
public class MainActivity extends FragmentActivity {
/** 底部导航 */
private RadioGroup main_radiogroup;
private Fragment mCurrent; // 当前的mCurrent
private TabFragment faxian; // 发现
private TabFragment huida; // 回答
private TabFragment denglu; // 登陆
private TabFragment xiaoxi; // 消息
private TabFragment wenta; // 问他 // private FragmentManager fm;
// private FragmentTransaction ft; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
main_radiogroup = (RadioGroup) this.findViewById(R.id.main_radiogroup);
// fm = getSupportFragmentManager();
// main_radiogroup 被选中 ,时候的监听器
main_radiogroup
.setOnCheckedChangeListener(new OnCheckedChangeListener() { @SuppressLint("ResourceAsColor")
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
/** 改变文字的颜色 */
int length = group.getChildCount();
for (int i = 0; i < length; i++) {
RadioButton radioButton = (RadioButton) group
.getChildAt(i);
if (radioButton.getId() != checkedId) {
// 没有选中的 时候的文字颜色
radioButton.setTextColor(getResources()
.getColor(R.color.tv_checked_nor));
} else { // 选中的时候的文字颜色
radioButton.setTextColor(getResources()
.getColor(R.color.tv_checked_bg));
}
}
switch (checkedId) {
case R.id.tab_rbo_answer:
changeAnswer(); //切换回答
break;
case R.id.tab_rbo_discover:
changeDiscover(); //切换问他
break;
case R.id.tab_rbo_message:
changeMessage(); //消息
break;
case R.id.tab_rbo_question:
changeQuesion();
break;
case R.id.tab_rbo_user: //用户
changeUser();
break;
}
}
});
mCurrent = new TabFragment(); //起始时候 给个值 ,不然会 报异常
/** 默认选择第一个 */
changeQuesion();
} /**
* 切换问他
*/
private void changeQuesion() {
if (wenta == null) {
wenta = new TabFragment();
Bundle bundle = new Bundle();
bundle.putString("name", "问他");
wenta.setArguments(bundle);
}
switchContent(wenta);
// ft.replace(R.id.frame_container, tab1);
// ft.commit(); } /**
* 切换消息
*/
private void changeMessage() {
if (xiaoxi == null) {
xiaoxi = new TabFragment();
Bundle bundle = new Bundle();
bundle.putString("name", "消息");
xiaoxi.setArguments(bundle);
}
switchContent(xiaoxi);
// ft.replace(R.id.frame_container, tab1);
// ft.commit();
} /***
* 切换登录
*/
private void changeUser() {
if (denglu == null) {
denglu = new TabFragment();
Bundle bundle = new Bundle();
bundle.putString("name", "用户");
denglu.setArguments(bundle);
}
switchContent(denglu);
// ft.replace(R.id.frame_container, tab1);
// ft.commit();
} /***
* 切换回答
*/
private void changeAnswer() {
if (huida == null) {
huida = new TabFragment();
Bundle bundle = new Bundle();
bundle.putString("name", "回答");
huida.setArguments(bundle);
}
switchContent(huida);
// ft.replace(R.id.frame_container, tab1);
// ft.commit();
} /***
* 切换发现
*/
private void changeDiscover() {
if (faxian == null) {
faxian = new TabFragment();
Bundle bundle = new Bundle();
bundle.putString("name", "发现");
faxian.setArguments(bundle);
}
switchContent(faxian);
// ft.replace(R.id.frame_container, tab1);
// ft.commit();
} /** 修改显示的内容 不会重新加载 **/
public void switchContent(Fragment to) {
if (mCurrent != to) {
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
if (!to.isAdded()) { // 先判断是否被add过
transaction.hide(mCurrent).add(R.id.frame_container, to)
.commit(); // 隐藏当前的fragment,add下一个到Activity中
} else {
transaction.hide(mCurrent).show(to).commit(); // 隐藏当前的fragment,显示下一个
}
mCurrent = to;
}
// showContent();
}
}
TabFragment.java
public class TabFragment extends Fragment {
private String tab_name;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//得到 activity 传来的 值
tab_name=getArguments().getString("name"); } @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_tab, container, false);
TextView tv=(TextView) view.findViewById(R.id.textview1);
tv.setText(tab_name);
return view;
}
}
layout文件夹下 fragment_tab.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > //fragment_tab <TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="100sp"
android:layout_centerInParent="true" // 居 父中间
/> </RelativeLayout>
运行后效果:
仿QQ底部切换(Fragment + Radio)的更多相关文章
- 仿qq底部的提示标记
看到一个比較不错的开源项目,分享给大家: <?xml version="1.0" encoding="utf-8"?> <RelativeLa ...
- Android高仿qq及微信底部菜单的几种实现方式
最近项目没那么忙,想着开发app的话,有很多都是重复,既然是重复的,那就没有必要每次都去写,所以就想着写一个app通用的基本框架,这里说的框架不是什么MVC,MVP,MVVM这种,而是app开发的通用 ...
- Android Studio精彩案例(二)《仿微信动态点击底部tab切换Fragment》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 现在很多的App要么顶部带有tab,要么就底部带有tab.用户通过点击tab从而切换不同的页面(大部分情况时去切换fragment). ...
- Fragment,仿QQ空间
转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9023451 在今天的这篇文章当中,我依然会以实战加理论结合 ...
- Android应用经典主界面框架之中的一个:仿QQ (使用Fragment, 附源代码)
备注:代码已传至https://github.com/yanzi1225627/FragmentProject_QQ 欢迎fork,如今来审视这份代码,非常多地方写的不太好,欢迎大家指正.有时间我会继 ...
- jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动
jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动 http://www.17sucai.com/pins/demoshow/382
- Activity内切换fragment实现底部菜单切换遇到的坑
1.一般说来,app底部导航都会设计为5个菜单,可以使用textView,也可使用radioButton,这里我选择用radioButton,给radioButton直接设置selector就可以实现 ...
- Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制)
Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制) 首先贴上七个控制布局代码 1.title_text_sel.xml 字体颜色的切换 放到color文件夹下面 <?xm ...
- android-改进<<仿QQ>>框架源代码
该文章主要改动于CSDN某大神的一篇文章,本人认为这篇文章的面向对象非常透彻,以下分享例如以下可学习的几点: Android应用经典主界面框架之中的一个:仿QQ (使用Fragment, 附源代码) ...
随机推荐
- iOS 尝试用 block 闭包 去代替delegate 实现方法
通常都是这样创建alert 再加一个代理 // 创建一个UIAlertView并显示出来 UIAlertView *alertview = [[UIAlertView alloc] initWithT ...
- 每天一个Linux命令(33)cal命令
cal命令用于显示当前日历,或者指定日期的日历. (1)用法: 用法: cal [选项] [[[日] 月] 年] (2)功能: 功能: 用于查看日历等时间信息,如只有一 ...
- 剑指offer之 从尾到头打印链表
package Problem5; import java.util.Stack; //首先定义链表结构class LinkNode{ LinkNode next; int node_value;} ...
- MVC中使用showModalDialog
1.mvc中使用模态对话框用于修改数据,如果第一次修改过后刷新页面,第二次修改时显示内容依然是第一次修改之前的,这里用js中的Math.Random()解决 Views: <%: Html.Ac ...
- 实现html表头固定,表格内的信息向上滚动
效果如下: <!doctype html>Table header header two fuck 1 fuck 2 fuck 1 fuck 2 fuck 1 fuck 2 fuck 1 ...
- java--xml文件读取(SAX)
SAX解析原理: 使用Handler去逐个分析遇到的每一个节点 SAX方式解析步奏: 创建xml解析需要的handler(parser.parse(file,handler)) package com ...
- C - Alyona and SpreadsheetDP
题目链接 题意在一个矩阵中,询问l~r行是否有一列满足mp[i][j]>=mp[i-1][j](i属于l~r)即非递减序列,是输出Yes,否输出No 用vector<vector<i ...
- 我对java的理解(二)——反射是小偷的万能钥匙
在我们生活中,车上或者路上有时候会遇到一种很讨厌的人——“小偷”,趁我们不注意或者疏忽的时候拿走属于我们的东西.更有甚者,趁我们不在家的时候,手持一把万能钥匙,打开我们的房门,悠闲的查看房间的布置,翻 ...
- Linux-安装ssh服务
问题描述: 有些版本的linux系统,如Ubuntn 16 ,安装完成后缺少ssh服务, 所以putty链接会出现访问失败的情况. 解决办法: 在linux中安装ssh服务,并启动 1.安装 sudo ...
- Ffmpeg移植S3C2440
Ffmpeg移植过程: FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证.它的移植同样遵循LGPL或GPL移植方法:configure.make.make ...