Android Fragment实现导航栏
2015-10-14 11:55
387 查看
一、唠叨唠叨
人生第一次写博客,也不求有什么大神之作,就自己练练手,让自己学会表达,学会把自己心里的东西拿出来给人家看看,就像找女朋友一样,你不说出来自己多爱她,甚至不表现出来,哪里会有机会呢,是吧?让她自己发现你,爱上你,可能性好小的样子。。。
二、导航栏的实现方式
先上个图
像这种导航栏的实现方式有很多,有FragmentTabHost、RadioGroup+Fragment、ViewPager等等各种,他们都有自己的优势和方便之处,这是重点讲一下利用Fragment+button的方式来实现,也是我常用的方式,比较底层,可能没有其他方式简单,高手不要见笑。
三、实现步骤
1、 布局出我们想要的底部导航按钮、
2 、 在Activity初始化的时候,设置首页卡项,也就是setTabSelection(0);
3 、 然后再点击下部导航按钮的时候,我们就可以切换上方的Fragment
其中颜色、背景以及fragment的显示隐藏的切换,偷懒了一下,让他们统一设置为初始状态,然后根据点击的位置,单独更换。
先统一
再单独
显示与隐藏也是同样的道理,就不再累赘了。
其中Fragment的定义以及使用,我就不在详述了,还有欠缺的同学自行百度脑补。
四、还有话说
做开发的时间也挺长的了,虽然没有多牛的技术,但是身为一个数学人,感觉本科的数学还是没有白学,至少在开发中遇到的各种逻辑,大部分可以从容的应付。还有一句不吐不快的话,所谓高手是经验和逻辑都很强的人,那种只有经验,而连自己的经验都不知道是什么逻辑的人,算个屁的高手。(注:此句话没有任何攻击性,只是强调做人还是不要太傲的好。)
人生第一次写博客,也不求有什么大神之作,就自己练练手,让自己学会表达,学会把自己心里的东西拿出来给人家看看,就像找女朋友一样,你不说出来自己多爱她,甚至不表现出来,哪里会有机会呢,是吧?让她自己发现你,爱上你,可能性好小的样子。。。
二、导航栏的实现方式
先上个图
像这种导航栏的实现方式有很多,有FragmentTabHost、RadioGroup+Fragment、ViewPager等等各种,他们都有自己的优势和方便之处,这是重点讲一下利用Fragment+button的方式来实现,也是我常用的方式,比较底层,可能没有其他方式简单,高手不要见笑。
三、实现步骤
废话不多说了,切重点。
1、 布局出我们想要的底部导航按钮、
节省空间,这里只列出一项来
<RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" > <ImageView android:id="@+id/img_main_home" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:adjustViewBounds="true" android:clickable="false" android:maxHeight="25dp" android:maxWidth="25dp" android:src="@drawable/bg_bottom_home_down" /> <TextView android:id="@+id/tv_main_home" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/img_main_home" android:layout_centerHorizontal="true" android:text="@string/txt_main_home" android:textColor="@color/white" android:textSize="9sp" /> </RelativeLayout>
2 、 在Activity初始化的时候,设置首页卡项,也就是setTabSelection(0);
这个方法的具体定义如下:
public void setTabSelection(int index) { FragmentTransaction transaction = fragmentManager.beginTransaction(); hideFragment(transaction); switch (index) { case 0: if (fragment_Main == null) { fragment_Main = new Fragment_Main(this, getWindowManager()); transaction.add(R.id.layout_main_replace, fragment_Main); } else { transaction.show(fragment_Main); } setBottomButtonBgFalse(); img_main_home.setImageResource(R.drawable.bg_bottom_home_down); setBottomClickTrue(); btn_main_home.setClickable(false); break; case 1: if (fragment_identify == null) { fragment_identify = new Fragment_Map(this, getWindowManager()); transaction.add(R.id.layout_main_replace, fragment_identify); } else { transaction.show(fragment_identify); } setBottomButtonBgFalse(); img_main_friend.setImageResource(R.drawable.bg_bottom_friend_down); setBottomClickTrue(); btn_main_friend.setClickable(false); break; case 2: if (fragment_sort == null) { fragment_sort = new Fragment_Sort(this, getWindowManager()); transaction.add(R.id.layout_main_replace, fragment_sort); } else { transaction.show(fragment_sort); } setBottomButtonBgFalse(); img_main_explore.setImageResource(R.drawable.bg_bottom_explore_down); setBottomClickTrue(); btn_main_explore.setClickable(false); break; case 3: if (fragment_Chat == null) { fragment_Chat = new Fragment_Chat(this, getWindowManager()); transaction.add(R.id.layout_main_replace, fragment_Chat); } else { transaction.show(fragment_Chat); } setBottomButtonBgFalse(); img_main_chat.setImageResource(R.drawable.bg_bottom_chat_down); setBottomClickTrue(); btn_main_chat.setClickable(false); break; default: break; } transaction.commit(); }
3 、 然后再点击下部导航按钮的时候,我们就可以切换上方的Fragment
public void onClick(View v) { switch (v.getId()) { case R.id.btn_main_home: setTextColor(); tvMainHome.setTextColor(Color.rgb(97, 164, 253)); setTabSelection(0); break; case R.id.btn_main_friend: setTextColor(); tvFind.setTextColor(Color.rgb(97, 164, 253)); setTabSelection(1); break; case R.id.btn_main_explore: setTextColor(); tvJolly.setTextColor(Color.rgb(97, 164, 253)); setTabSelection(2); break; case R.id.btn_main_chat: setTextColor(); tvChat.setTextColor(Color.rgb(97, 164, 253)); setTabSelection(3); break; default: break; } }
其中颜色、背景以及fragment的显示隐藏的切换,偷懒了一下,让他们统一设置为初始状态,然后根据点击的位置,单独更换。
先统一
private void setTextColor() { tvMainHome.setTextColor(Color.WHITE); tvFind.setTextColor(Color.WHITE); tvJolly.setTextColor(Color.WHITE); tvChat.setTextColor(Color.WHITE); }
再单独
tvMainHome.setTextColor(Color.rgb(97, 164, 253));
显示与隐藏也是同样的道理,就不再累赘了。
其中Fragment的定义以及使用,我就不在详述了,还有欠缺的同学自行百度脑补。
四、还有话说
做开发的时间也挺长的了,虽然没有多牛的技术,但是身为一个数学人,感觉本科的数学还是没有白学,至少在开发中遇到的各种逻辑,大部分可以从容的应付。还有一句不吐不快的话,所谓高手是经验和逻辑都很强的人,那种只有经验,而连自己的经验都不知道是什么逻辑的人,算个屁的高手。(注:此句话没有任何攻击性,只是强调做人还是不要太傲的好。)
相关文章推荐
- 使用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