
1、内容:请根据课程实操实现APP门户界面框架设计,至少包含4个tab页,能实现tab页之间的点击切换;
2、技术:使用布局(layouts)和分段(fragment),对控件进行点击监听;
1.new一个project,一直next,然后选择保存路径,点击finish。这里的保存路径最好不要有空格,文件的命名也可以有大小写,但是AS在识别的时候是小写,会出现TYPO warning(不过可以不care,对后续程序执行没有任何影响。
2.给activity_main.xml操作一番。因为一个程序不能是单一的结构,并且如果直接在主xml文件里面操作发生错误的话会很麻烦,所以我们在设计的时候最好是include自己新建的xml文件到activity_main.xml里面。(毕竟错了也好删哈哈
一下是本人新建的top.xml和bottom.xml:
top.xml
bottom.xml部分代码
3.建立fragment,用于点击下面的图表能够切换页面。在自己的com.example.MyApplication文件夹上右键新建,如图。
命个名,在下面的layout文件夹里会自动生成相应的xml文件。
4.在每个fragment对应的xml里设置你想展示的界面。
例如:
5.然后然后就是MainActivity.java的编写了。具体怎么写参考第二大点核心技术。
*相应的技术要求
1、findViewById()函数
定义如下:
publicT findViewById(@IdRes int id) { return getDelegate().findViewById(id); }
简单来说,就是将xml里的View传值到主函数里面。在主函数的类里面没有你layout文件里的各种View,所以要在主函数的类里新建一个和你需要引用View同类型的对象,然后通过findViewById()建立起联系,然后进行各种操作。
2、FragmentManager和FragmentTrasaction:
FragmentManager顾名思义是fragment管理器,二FragmentTransaction是由FragmentManager初始化的一种处理fragment的类型,也叫事务。
初始化过程如下:
fragmentManager=getSupportFragmentManager(); FragmentTransaction transaction=fragmentManager.beginTransaction();
其中fragmentmanager是MainActivity.java类里面的一个成员变量,在主函数oncreate或者其他自己构造的函数中可以直接初始化并使用。
而transaction是一种动态的处理事务,在每次调用之后都需要使用commit()函数来将它关闭。具体解析见Java中的事务及使用
在写FragmentManager初始化语句的时候,AS提词器会出现多个FragmentManager,看:
两个FragmentManager分别来自不同的包。在使用的时候,如果FragmentManager使用了androidx.fragment.app包,那transaction就不要使用android.app包了。在这一点可以参考这个姐姐写的区别required android.app.fragment,required:‘android.app.Fragment’
3、监听:
安卓里设置监听有四种方法,具体见这位大哥写的Android开发-设置监听器的四种方法
写得真的很详细!
本人用的第一种,即用接口实现监听。
首先需要MainActivity继承一个onClickListener接口,可以是View.onClickListener也可以是button.onClickListener,这根据你需要点击的控件类型来定。继承了之后会报错,这时候根据应用提示在MainActivity中插入onClick函数就好了。
其次是在oncreate函数里设置一个监听器,
Linearlayout1.setonClickListener(this);
然后就是第一步自动生成的onClick函数的编写了。你想要的点击效果,切换什么fragment,字体变成什么颜色都可以写在onclick函数里。
*运行结果展示
【初始界面】
有喜欢粉墨的吗@_@
【点击下面的每个图标,在页面切换的同时,图标也会变成相应的水果】
嗯。。就这样。。。很简单是不是。。天知道我弄这个弄了几天(我承认我是vegetabledog,哭
或许有人写好以后打开app会闪退,debug出来的logcat日志这么写的:
知道我是为什么报错吗,为了这个错,本人,不知道重新建立了几个项目!!最后发现,老师在上课的时候改了导入java包的名字。
android.app.Fragment和androidx.appcompat.app.Fragment是不一样的!
第一个可以兼容多版本安卓,第二个只支持较新版本的安卓。but如果你用的AndroidStudio是较新的版本,最好最好用Androidx.开头的包。不然在代码没错的情况下也会闪退!
还有,别以为安卓提词器好用就可以闭着眼睛看到函数名就按enter,很多函数比如add就会被重载好几次,写的时候要不仅看函数名还要看参数。像我这样的新手如果因为这种小问题出错的话后果不堪设想。。
头一次这么zqsg地写博客,突然发现写博客还挺有用的(
有些操作老师讲的时候按部就班地跟着做也觉得没啥,下来细想就觉得里面有大大的学问(笑)
综上所述,写代码不是最烦的,最烦的是由各种不知名原因引起的错误,解决完以后头发都没剩几根了。所以,在编写文件,设置参数,包括给变量起名的时候都要谨慎再谨慎。如果出现了非语法错误,也不要恐慌,尝试看看logcat日志(看第一行就行),或者从头再来,总之错误都不是凭空而出的,都是因为某个操作,某个语句没写好而造成的。相反,既然是错误就一定有错误的解决方法,在错误被解决了之后,你的境界就会往上生一个level。
祝大家平安健康!
这是本人的giteezsysandroid_toohard