版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】怎么在Fragment中使用ViewPager实现一个底部导航栏
本篇文章为大家展示了怎么在Fragment中使用ViewPager实现一个底部导航栏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。<RelativeLayout
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/theme_color"
android:clipToPadding="true"
android:fitsSystemWindows="true"
>
<include
android:id="@+id/actionbar_activity_main"
layout="@layout/actionbar"
/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/actionbar_activity_main"
android:background="@color/white"
>
<RadioGroup
android:id="@+id/rg_menu_activity_main"
android:layout_width="fill_parent"
android:layout_height="55dp"
android:layout_alignParentBottom="true"
android:background="@color/theme_color"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="3"
>
<RadioButton
android:id="@+id/rb_main_tab_menu1"
android:checked="true"
android:drawableTop="@drawable/radiobt_main_home"
android:gravity="center"
android:paddingTop="12dp"
android:text="@string/home_text"
android:textColor="@color/white"
/>
<RadioButton
android:id="@+id/rb_main_tab_menu2"
android:checked="false"
android:drawableTop="@drawable/radiobt_main_my"
android:gravity="center"
android:paddingTop="12dp"
android:text="@string/my_text"
android:textColor="@color/white"
/>
<RadioButton
android:id="@+id/rb_main_tab_menu3"
android:checked="false"
android:drawableTop="@drawable/radiobt_main_setting"
android:gravity="center"
android:paddingTop="12dp"
android:text="@string/setting_text"
android:textColor="@color/white"
/>
</RadioGroup>
<android.support.v4.view.ViewPager
android:id="@+id/vp_activity_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/rg_menu_activity_main"
/>
</RelativeLayout>
</RelativeLayout>这个布局实现的效果如下:只看效果,大家觉得挺好的,但是重要的问题来了。下面的radioButton点了没反应,我检查了一下xml文件,再检查了一下java代码,没有问题啊,我开始方了,,,然后网上搜,好像没有人遇到这个问题,,检查好几遍之后,问旁边的同学,他说既然设置了监听,但是没有反应,那肯定是有一个东西把这个事件消费掉了,我想起来了之前看的事件分发机制,,建议大家对事件分发机制不懂的小伙伴赶紧看看,面试和日常写代码都要用到,特别是面试,面试官特别喜欢问。回归正题,大家看我的xml文件,我把viewpager写在了Radiogroup的下面,并且,layout_height="fill_parent"
这样我的viewpager就消费掉了我的radiobutton的点击事件,其实之后我觉得,是我的逻辑不正确,我应该顺序的写下来,而不是只实现功能,这样我看自己的代码可以看懂,可是给别人可能会造成误解。好了,开始说一下,实现底部导航的整个流程,实现的界面还如上:(在studio中写的)actionbar.xml
上面自定义的actionbar
系统自带的actionbar在java代码中去掉了代码功能:
左边返回键
中间显示的文字右边的更多键
上图中没有显示出来,是因为我没有让左右的键显示出来<?xml
version="1.0"
encoding="utf-8"?>
<RelativeLayout
xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="@dimen/actionBar_height"
android:background="@color/theme_color"
>
<RelativeLayout
android:id="@+id/rl_back_actionbar"
android:layout_width="@dimen/actionBar_back"
android:layout_height="fill_parent"
android:visibility="invisible">
<ImageView
android:layout_width="22dp"
android:layout_height="20dp"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:background="@drawable/back"
android:contentDescription="@string/app_name"/>
</RelativeLayout>
<TextView
android:id="@+id/tv_title_actionbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/TimeRobot"
android:textColor="#ffffff"
android:textSize="@dimen/actionBar_title_text_size"
/>
<RelativeLayout
android:id="@+id/rl_more_actionbar"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:visibility="invisible">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_centerVertical="true"
android:layout_marginRight="12dp"
android:background="@drawable/more"
android:contentDescription="@string/app_name"/>
</RelativeLayout>
</RelativeLayout>activity_main.xml文件
中间的部分color资源,是我引用的自动的,大家可以自己选择<?xml
version="1.0"
encoding="utf-8"?>
<RelativeLayout
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/theme_color"
android:clipToPadding="true"
tools:context=".MainActivity">
<!--
引入
actionbar-->
<include
android:id="@+id/actionbar_activity_main"
layout=
"@layout/actionbar"/>
<android.support.v4.view.ViewPager
android:id="@+id/vp_activity_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/actionbar_activity_main"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:background="@color/white"/>
<RadioGroup
android:id="@+id/rg_main_radioGroup"
android:layout_width="fill_parent"
android:layout_height="58dp"
android:layout_alignParentBottom="true"
android:background="@color/theme_color"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="3">
<RadioButton
android:id="@+id/rb_main_tab_menu1"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:checked="true"
android:drawableTop="@drawable/radio_bt_plan"
android:gravity="center"
android:button="@null"
android:paddingTop="8dp"
android:text="@string/home_text"
android:textColor="@color/white"/>
<RadioButton
android:id="@+id/rb_main_tab_menu2"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:checked="false"
android:drawableTop="@drawable/radio_bt_time"
android:gravity="center"
android:button="@null"
android:paddingTop="8dp"
android:text="@string/timeGroup"
android:textColor="@color/white"/>
<RadioButton
android:id="@+id/rb_main_tab_menu3"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:checked="false"
android:drawableTop="@drawable/radio_bt_my"
android:gravity="center"
android:button="@null"
android:paddingTop="8dp"
android:textColor="@color/white"
android:text="@string/My"/>
</RadioGroup>
</RelativeLayout>注意一下,radiobutton中的一个属性是
drawableTop属性,这个后面引用的drawable资源是实现点击改变radiobutton状态的布局文件,我给大家贴出来radio_bt_plan.xml文件的代码,其他的只要新建,copy代码,改显示的图片即可。还有,对于初次用studio的伙伴,这里要注意了,new的时候,drawable>右键
>
new>newresourcefile
(即出来的第一个)而不是XMLradio_bt_plan.xml<?xml
version="1.0"
encoding="utf-8"?>
<selector
xmlns:android="/apk/res/android">
<item
android:drawable="@drawable/planning_press"
android:state_enabled="true"
android:state_focused="true"
android:state_pressed="false"/>
<item
android:drawable="@drawable/planning_press"
android:state_enabled="true"
android:state_pressed="true"
/>
<item
android:drawable="@drawable/planning_press"
android:state_checked="true"
android:state_enabled="true"
/>
<item
android:drawable="@drawable/planning"/>
</selector>接下来就是
MainActivity.java文件了public
class
MainActivity
extends
FragmentActivity
{
private
TextView
title_text;
private
ViewPager
vp_main_tab;
private
List<Fragment>
fragmentList
=
null;
private
FragmentPagerAdapter
mAdapter
=
null;
private
MyFragment
myFragment;
private
TimeGroupFragment
timeGroupFragment;
private
PlanningFragment
planningFragment;
private
RadioButton
rb_main_tab_menu1;
private
RadioButton
rb_main_tab_menu2;
private
RadioButton
rb_main_tab_menu3;
private
RadioGroup
rg_main_group;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
init();
rg_main_group.setOnCheckedChangeListener(new
RadioGroup.OnCheckedChangeListener()
{
@Override
public
void
onCheckedChanged(RadioGroup
group,
int
checkedId)
{
switch
(checkedId)
{
case
R.id.rb_main_tab_menu1:
vp_main_tab.setCurrentItem(0);
initActionbar(0);
break;
case
R.id.rb_main_tab_menu2:
vp_main_tab.setCurrentItem(1);
initActionbar(1);
break;
case
R.id.rb_main_tab_menu3:
vp_main_tab.setCurrentItem(2);
initActionbar(2);
break;
default:
break;
}
}
});
initViewPage();
}
private
void
initActionbar(int
currentPage)
{
switch
(currentPage)
{
case
0:
title_text.setText(getResources().getString(R.string.TimeRobot));
break;
case
1:
title_text.setText(getResources().getString(R.string.timeGroup));
break;
case
2:
title_text.setText(getResources().getString(R.string.My));
break;
default:
break;
}
}
private
void
init()
{
title_text
=
(TextView)
findViewById(R.id.tv_title_actionbar);
vp_main_tab
=
(ViewPager)
findViewById(R.id.vp_activity_main);
fragmentList
=
new
ArrayList<Fragment>();
rg_main_group
=
(RadioGroup)
findViewById(R.id.rg_main_radioGroup);
rb_main_tab_menu1
=
(RadioButton)
findViewById(R.id.rb_main_tab_menu1);
rb_main_tab_menu2
=
(RadioButton)
findViewById(R.id.rb_main_tab_menu2);
rb_main_tab_menu3
=
(RadioButton)
findViewById(R.id.rb_main_tab_menu3);
myFragment
=
new
MyFragment();
timeGroupFragment
=
new
TimeGroupFragment();
planningFragment
=
new
PlanningFragment();
fragmentList.add(myFragment);
fragmentList.add(timeGroupFragment);
fragmentList.add(plannin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全球及中国自动分配系统行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 全球及中国脑电图和肌电图设备行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 全球及中国脂肪分离器行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 全球及中国胫骨夹板行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 全球及中国肉桂酸行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 全球及中国联网车辆设备行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 全球及中国组合开关行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 全球及中国细胞外基质蛋白行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 全球及中国紧急和和大规模通知服务行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 全球及中国粘合剂和密封剂筒行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告(2024-2030)
- 统编教学小学语文课外阅读《细菌世界历险记》导读课教学设计
- 卡尔威特的教育读书感悟课件
- 文化人类学概论课件
- 妇产科学女性生殖系统解剖优秀课件
- 儿童期行为与社会环境(-)课件
- 邹平六电一厂发变组励磁系统参数测试PSS试验方案
- 学生在校证明模板
- 《新时代公共事业单位发展中的问题与对策研究(论文)》9600字
- 国开公共政策概论形考任务2试题及答案
- 三年级语文下册第五单元集体备课教案
- 行政处罚案卷评查评分标准48张课件
评论
0/150
提交评论