安卓--类似微信底部导航栏实现原理(frame和radiogroup)
2016-07-20 22:39
609 查看
说在最前:本文只讲述了底部导航栏的实现原理,延续以前的风格,只有图标说明,还有伪码说明,轮子自己造去,明白了原理很简单。
1.分为哪几部分?
详细分来共有四部分:总的frame(java)、需要跳转到的各个页面的frame(java)、总的frame的页面布局(XML)、对应各个页面(XML)。以下会解释各个部分的作用和相互协作
2. 总的frame的页面布局(XML)
以下图为例,分为底部导航栏和显示框架(自己称为显示框架),底部导航栏在整个app使用过程中一直在监听动作。页面的切换发生在显示框架中,即显示框架用于盛放各个button对应的页面。
3. button对应的各个页面(XML)
这个就是自己要实现的页面,对应到微信,就是点击完底部导航栏的发现,出现的那个列表页面。根据自己的需要,自己实现。
4. 需要跳转到的各个页面的frame(java)
在这儿先称为分页面,分页面的主要任务是:监听改页面的控件事件,或是完成该页面定义的功能。分两部分:第一部分设置显示对应的页面,第二部分设置控件的事件监听(没有可忽略)
public class 分页面 extends Fragment implements OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.分页面, container, false);//第一部分,显示分页面的XML
init();
return view;
}
//第二部分,监听控件事件(若没有,可忽略)
public void init() {
初始化,绑定该页面中的需要事件监听的控件。
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
重载onClick函数,监听button,设置相应的动作。
}
}
5. 总的frame(java)
public class 总框架 extends FragmentActivity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(总体页面布局的XML);
// 设置默认的Fragment
setDefaultFragment();
}
// 设置默认的Fragment,即设置打开程序默认为哪个页面,
private void setDefaultFragment() {
getSupportFragmentManager().beginTransaction().replace(总页面布局的FrameLayout, 要替换的页面frame(java)).commit();
记得在这儿也设置位于默认页面时,对应按钮的状态(按下后按钮变色效果)
}
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
case RG1:
//设置页面替换
if (RG1对应的Frame(java)为空)
RG1对应的Frame(java) = new RG1对应的frame(java);
Replace(总页面布局的FrameLayout(XML), RG1对应的Frame(java));
//记得设置各个button,对应不同的状态的背景图
break;
case RG2:
//设置页面替换
if (RG1对应的Frame(java)为空)
RG2对应的Frame(java) = new RG2对应的frame(java);
Replace(总页面布局的FrameLayout(XML), RG2对应的Frame(java));
//记得设置各个button,对应不同的状态的背景图
break;
case RG3:
//设置页面替换
if (RG1对应的Frame(java)为空)
RG3对应的Frame(java) = new RG3对应的frame(java);
Replace(总页面布局的FrameLayout(XML), RG3对应的Frame(java));
//记得设置各个button,对应不同的状态的背景图
break;
case RG4:
//设置页面替换
if (RG1对应的Frame(java)为空)
RG4对应的Frame(java) = new RG4对应的frame(java);
Replace(总页面布局的FrameLayout(XML), RG4对应的Frame(java));
//记得设置各个button,对应不同的状态的背景图
break;
}
}
具体的代码因工程而已,具体的细节不会编码,从网上请教大牛们。文章只介绍了实现原理,初学安卓,用语也不专业,请指点。说的模糊请指出。
1.分为哪几部分?
详细分来共有四部分:总的frame(java)、需要跳转到的各个页面的frame(java)、总的frame的页面布局(XML)、对应各个页面(XML)。以下会解释各个部分的作用和相互协作
2. 总的frame的页面布局(XML)
以下图为例,分为底部导航栏和显示框架(自己称为显示框架),底部导航栏在整个app使用过程中一直在监听动作。页面的切换发生在显示框架中,即显示框架用于盛放各个button对应的页面。
3. button对应的各个页面(XML)
这个就是自己要实现的页面,对应到微信,就是点击完底部导航栏的发现,出现的那个列表页面。根据自己的需要,自己实现。
4. 需要跳转到的各个页面的frame(java)
在这儿先称为分页面,分页面的主要任务是:监听改页面的控件事件,或是完成该页面定义的功能。分两部分:第一部分设置显示对应的页面,第二部分设置控件的事件监听(没有可忽略)
public class 分页面 extends Fragment implements OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.分页面, container, false);//第一部分,显示分页面的XML
init();
return view;
}
//第二部分,监听控件事件(若没有,可忽略)
public void init() {
初始化,绑定该页面中的需要事件监听的控件。
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
重载onClick函数,监听button,设置相应的动作。
}
}
5. 总的frame(java)
public class 总框架 extends FragmentActivity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(总体页面布局的XML);
// 设置默认的Fragment
setDefaultFragment();
}
// 设置默认的Fragment,即设置打开程序默认为哪个页面,
private void setDefaultFragment() {
getSupportFragmentManager().beginTransaction().replace(总页面布局的FrameLayout, 要替换的页面frame(java)).commit();
记得在这儿也设置位于默认页面时,对应按钮的状态(按下后按钮变色效果)
}
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
case RG1:
//设置页面替换
if (RG1对应的Frame(java)为空)
RG1对应的Frame(java) = new RG1对应的frame(java);
Replace(总页面布局的FrameLayout(XML), RG1对应的Frame(java));
//记得设置各个button,对应不同的状态的背景图
break;
case RG2:
//设置页面替换
if (RG1对应的Frame(java)为空)
RG2对应的Frame(java) = new RG2对应的frame(java);
Replace(总页面布局的FrameLayout(XML), RG2对应的Frame(java));
//记得设置各个button,对应不同的状态的背景图
break;
case RG3:
//设置页面替换
if (RG1对应的Frame(java)为空)
RG3对应的Frame(java) = new RG3对应的frame(java);
Replace(总页面布局的FrameLayout(XML), RG3对应的Frame(java));
//记得设置各个button,对应不同的状态的背景图
break;
case RG4:
//设置页面替换
if (RG1对应的Frame(java)为空)
RG4对应的Frame(java) = new RG4对应的frame(java);
Replace(总页面布局的FrameLayout(XML), RG4对应的Frame(java));
//记得设置各个button,对应不同的状态的背景图
break;
}
}
具体的代码因工程而已,具体的细节不会编码,从网上请教大牛们。文章只介绍了实现原理,初学安卓,用语也不专业,请指点。说的模糊请指出。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories