您的位置:首页 > 移动开发 > 微信开发

安卓--类似微信底部导航栏实现原理(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;

}
}


具体的代码因工程而已,具体的细节不会编码,从网上请教大牛们。文章只介绍了实现原理,初学安卓,用语也不专业,请指点。说的模糊请指出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android