安卓开发--应用市场的界面制作(一)--viewpager+fragment实现可滑动的底部导航栏
来源:互联网 发布:影视后期制作软件 编辑:程序博客网 时间:2024/05/04 12:08
- 相关文章
- 前言
- 布局文件
- MainAcivity
- 细节
相关文章
- Android Fragment完全解析,关于碎片你所需知道的一切
这是一片很不错的博文,基本上看完就懂fragment是个什么情况了 - ViewPager防止Fragment销毁以及取消Fragment的预加载
- 分类整理res/Layouts中的布局文件(创建子目录)
这篇博文主要是讲了怎么在layout下创建一个子目录,贴这个链接主要是因为楼主看到layout下面一堆乱七八糟的堆着,就感觉很不爽,所以如果大家也有这种感觉可以看看这篇。
前言
第一次写博客,对markdown的使用还不是很熟悉。。。。
刚刚学完fragment,真是感觉安卓的碎片化一下子可以让开发变得简单好多。学了这么几十年的安卓了(卧槽,暴露年龄了),以前都是在做一些小demo,学习新知识。所以这几天打算回顾一下以前学的东西,串起来做一个大项目——-应用市场的界面(项目?,嗯~~可以算是吧,哈哈)。闲话少说,开始干活。
今天先用viewpager+fragment做一个可以左右滑动的导航栏。先上图:
这个做起来其实也很简单,主布局中放一个 viewpager,一个Radiogroup就好了,然后把要放置的fragment用adapter关联起来,最后处理一下radiogroup的哦那checkedchangedlistener和viewpager的OnPageChangeListener 。一切ok了。
布局文件
- layout_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/group"/> <RadioGroup android:id="@+id/group" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:orientation="horizontal"/></RelativeLayout>
- radiobuttion.xml
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/guide_background" android:button="@null" android:gravity="center" android:textSize="20sp" />
- 4个fragment的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="这是recommand!"/></RelativeLayout>
MainAcivity
public class MainActivity extends FragmentActivity {//这里一定不能继承Activity,因为后面用到的getSupportFragmentManager在Activity下无法获取。 private ViewPager pager; private ArrayList<Fragment> fragments=new ArrayList<>(); private Recommand recommand; private Apps apps; private Rank rank; private Manage manage; private RadioGroup group; private String[] guide_names; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);//全屏显示 setContentView(R.layout.activity_main); Init_Views();//初始化view Manage_ViewPager();//管理viewpager Manage_RadioGroup();//管理radiogroup } private void Manage_RadioGroup(){ for (int i=0;i<4;i++){ RadioButton button=(RadioButton) LayoutInflater.from(this).inflate(R.layout.radiobutton,null); button.setId(i); button.setText(guide_names[i]); //这里的layoutparams中的第三个参数是layout_weight RadioGroup.LayoutParams params=new RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,1); group.addView(button,params); } group.check(0);//选择第一个 group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { pager.setCurrentItem(checkedId);//在这里通知viewpager } }); } private void Manage_ViewPager(){ pager.setOffscreenPageLimit(3);//(1)重要代码,后面会解释。 pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {//(2)重要代码 @Override public android.support.v4.app.Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } }); pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { group.check(position);//在这里通知radiogroup } @Override public void onPageScrollStateChanged(int state) { } }); } private void Init_Views(){ pager=(ViewPager)findViewById(R.id.content); group=(RadioGroup)findViewById(R.id.group); recommand =new Recommand();apps=new Apps();rank=new Rank();manage=new Manage(); fragments.add(recommand);fragments.add(apps);fragments.add(rank);fragments.add(manage); guide_names=getResources().getStringArray(R.array.guide_array); }}
细节
- 这里使用的FragmentPagerAdapter和FragmentStatePagerAdapter是在viewpager中绑定fragment时最常用的两个adapter。
- FragmentPagerAdapter一般适用于页数较少的情况,他的特点是会保存当前界面,一般情况下是可以同时保存3个。当viewpager由第一页滑动到第二页时,会保存第一页,并预加载第三页。而当他滑动到第三页时,会将第一页销毁。
- 而FragmentStatePagerAdapter则更适用于fragment很多的情况,他的特点是,当离开这一页时,就会销毁他,这样在fragment较多时可以减少内存占用。
- 详情请参照这篇博文: ViewPager防止Fragment销毁以及取消Fragment的预加载
0 0
- 安卓开发--应用市场的界面制作(一)--viewpager+fragment实现可滑动的底部导航栏
- Fragment的应用之底部导航栏的实现(二)之应用ViewPager
- 主流移动应用开发框架(2)——fragment+fragmenttabhost实现底部选项卡导航(可滑动切换)
- android viewpager+Imagerview的可滑动主界面导航栏
- FragmentTabHost+ViewPager实现滑动的底部导航栏
- Radio+不可滑动的viewpager实现底部导航栏
- Fragment的应用之底部导航栏的实现(一)
- RadioGroup+ViewPager制作的底部导航栏
- 底部导航栏实现页面的切换(三):Fragment + RadioGroup + ViewPager
- 【Android】安卓开发实战之使用Fragment(碎片)实现底部导航栏效果
- Android ViewPager和Fragment实现顶部导航界面滑动效果、标签下的tab位置
- BottomBar+ViewPager+Fragment实现炫酷的底部导航效果
- 使用ViewPager和Fragment实现底部导航滑动重构版
- TabLayout+ViewPager实现滑动底部导航栏
- Fragment和ViewPager实现底部导航栏
- 使用ViewPager+Fragment实现底部导航栏
- BottomNavigationView+ViewPager+Fragment 实现底部导航栏
- Viewpager+fragment实现底部导航栏
- 如何欺骗你的用户
- 文字归宿
- ssh免密码(秘钥)登录Linux服务器
- SameSite Cookie,防止 CSRF 攻击
- 随想:人工智能与深度学习
- 安卓开发--应用市场的界面制作(一)--viewpager+fragment实现可滑动的底部导航栏
- 文章标题
- JSP 指令
- Ogre资源管理的设计缺陷
- linux预处理、编译、汇编、链接和运行的过程
- [js点滴]JavaScript中的作用域及作用域链的意义和解释
- Codeforces 731C. Socks
- lvs DR模式
- D3D11教程二十二之Multiple Point Lights(多个点光源)