您好,登录后才能下订单哦!
果然,还是项目驱动的学习方式比较有趣呢。
这周的学习全部围绕着选项卡,也就是tab。
用到了好多知识点,都不知道从哪里开始啦(≧o≦*)。
选项卡的制作有很多方法。选项菜单可以用普通的TextView,也可以直接上button。我选择的是TextView,可能更接近网页的思路吧。
先列个清单出来:
selector
Fragment
ViewPager
布局嘛,网上有一堆,就不提了。
1.selector
选项卡的功能,就是按不同的按钮就能切换到不同页面。作为反馈,按钮总得有点变化,比如换个颜色。实现思路很简单,点击之后换个图标就好了嘛。嗯~o(* ̄▽ ̄*)o,然而在onClick上折腾半天之后,我打开了百度,很快发现了selector这个标签。
Σヽ(Д ; )居然还有这种操作!
selector用起来很简单,写在drawable目录下:
for_tab1.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_news_act" android:state_selected="true" />
<item android:drawable="@drawable/ic_news" />
</selector>
ic_news和ic_news_act是通过new->Image Asset导入的图标,自动生成各种规格,免去了手动处理图片大小的麻烦。和.9图应该是一样的效果吧(.9图?我没做,我不懂)。
接着在主界面的TextView写上这句话:
android:drawableTop="@drawable/for_tab1"
完工!
改变item标签内的属性名(比如color),就可以改变其他效果。
2.Fragment
接着就是内容匹配。每个选项卡对应一个内容,一个内容就是一个Fragment。
android中一个页面可以看作一个Activity,而Fragment只是”碎片“,生命周期不会长于所存在的Activity。查看配置文件AndroidManifest.xml可以发现,Fragment是没有注册的。
最简单的Fragment,就是重写onCreatView:
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout., container, ); view; }
这时冒出了个inflater!你是谁?inflater说我只是个控制器,连接视图和模型。啊~虽然没有明白,但我暂时放过你,小心点inflater,我会盯着你的!
3.ViewPager
铛~铛~铛~
ViewPager来了!快让开!
诶,Fragment好像没讲完啊?没办法呀,Fragment没人(activity)权啊,只能靠主子(activity)接济过活╮(╯3╰)╭。ViewPager就是从Activity派来的走狗,啊呸,使者!
1) ViewPager可说是这个选项卡的核心。每个Fragment是选项卡显示的内容,ViewPager像是内容的容器,同时担任调度的工作。
布局里的ViewPager看起来就是个普通的标签,但是人家上头有人!
ViewPager需要一个FragmentAdapter才能工作。
这是个超简单的实现:
tabFragmentAdapter FragmentPagerAdapter { ArrayList<Fragment> ; =; tabFragmentAdapter(FragmentManager fm, ArrayList<Fragment> list){ (fm); .= list; } Fragment getItem(position) { .get(position); } getCount() { ; } }
入口在主界面的Java类中:
fa = (getSupportFragmentManager(), ); .setAdapter(fa);
fg是填入了所有Fragment的ArrayList。
getSupperFragmentManager()取到了主界面的FragmentManager。
vp是用id获取的布局中的ViewPager。
在tab所在的主界面的Java类的onCreate()中运行,就绑定好了这些Fragment。
2)Listener人呢?给tab们绑定好事件就该你上场了
tabListener View.OnClickListener { = ; tabListener(index) { .= index; } onClick(View v) { .setCurrentItem(); clearSelect(); .get().setSelected(); } }
index是区分tab的编号;
clearSelect是将tab卡片选择状态重置(用setSelected(false));
tabList里装的是作为tab按钮的TextView;
绑定事件应该会,,,吧?
(i = ; i < .size(); i++) { .get(i).setOnClickListener(tabListener(i)); }
似乎很简单,但是我不会告诉你,有一半时间花在了调空指针的BUG!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。