从零开始写安卓APP 实战记录 第一周

今晚要检查进度,赶在下午把前后端合并完成。后端两位同志很给力地接好了数据库,并且写好了登录注册和检索题目三个功能。我慢一点,写好了登录和注册的界面,已经对接完毕。
效果大概如下:
登录界面
登录界面
注册界面1
注册界面1
注册界面2
注册界面2
注册界面2 滚动选择器效果
滚动选择器
这个滚动选择器是借用的大佬的代码,大家看这里:
滚动选择器
我改动了一点点,包括各个控件的高度和位置,但是现在确定键还有一点点挡,后续还需要微调。然后外层button的内容没有设默认值,在改动后会设置成为当前选择值。
这里后端朋友说数据传后台的时候编码有点问题,用中文会乱码,但因为时间比较赶,就先全英文了,后面再改。

下面说几个遇到的问题和解决方法。

如何隐藏标题栏 NoTitleBar

可以看到现在的几个标题栏都是隐藏了的,这个地方需要在AndroidManifest.xml下进行设置

 <activity
            android:name=".register"
            android:launchMode="singleTask"
            android:theme="@style/Theme.AppCompat.NoActionBar"></activity>
        <!-- 设置为singleTask模式,这样从在注册两个页面间反复横跳时不会丢失之前填的数据 -->

当然launchMode大家自己选择。这里起作用的是theme那一行,这样这个activity就不会有标题栏了。
这里我们的activity是继承的AppCompatActivity类,也是现在android studio默认的,因此这样改不会冲突。
如果你这里继承的改成了Activity类,你可以写

 <activity
            android:name=".register"
            android:theme="@android:style/Theme.NoTitleBar">
</activity>

但是这样的话,几乎所有跟image相关的控件都需要间接引用,因为在Activity下面没有这些类。比如原来的ImageView,需要改成androidx.appcompat.widget.AppCompatImageView.
网上还有一种方法,在活动的java文件里写两个方法设置不显示标题栏,那个好像也要求你的活动继承Activity,不然是无效的。
相对而言,我更建议使用这里的第一种方法,AppCompat它不香吗?

关于升级到Androidx

我是从零开始凭空写的,自然是新建了一个空白的工程,而Android Studio的全新版本自然是默认用的Androidx。但是我的后端小伙伴们是硬撸的,他们从别人那里搞了一份开源代码在复用,因此一开始就是在别人的工程基础上改的,而那个工程是Android.support的老版。
因此在第一次合的时候,我的所有androidx的东西都不能跑。选择哪个版本呢?自然是选择google公司有在维护的新东西。于是后端小伙伴们新建了一个工程,把代码粘进去(因为代码量还不大),有问题的地方改掉,才合成功。
Androidx对SDK好像有版本要求。虽然配环境的时候大家应该都是装的我发群里的一个文件,但不知道为什么有位小朋友跑偏了,下了三个SDK,最后装上了一个最老版本,不支持Androidx。同时请确保工程里的gradle版本在3.4以上。

关于Button总是在最上层

首先记住一点,在android的xml中,都是先静态添加一个控件,剩下的控件通过addView动态添加。那么如果有控件覆盖的情况,先加入的控件就会被后加入得控件覆盖。
而Button本身挺烦的,这似乎是安卓的一个小bug。因为它有个按下之后的阴影还是什么问题,它会永远在最上层,不能被覆盖。大家可以看到我的最后效果里,滚动选择器应该在最上层,挡住下方的注册按钮。这里我比较推荐的方法是在Button控件里加一句:

android:stateListAnimator="@null"

bringToFront并不能阻止Button在最上层。当然我也可以在调出滚动选择器的时候加一句隐藏按钮,那就比较麻烦了。
也有人建议在Button外面裹一层layout,不知道为什么对我不适用。
一个比较全的总结见这里:
Android Button 总是在最上层的问题

空指针报错

空指针报错
看到空指针自然是很慌的,回想起数据结构的时候被空指针支配的恐惧……
看一下它指向的对象是啥:

pickerscrlllview.setOnSelectListener(pickerListener);

哦,是pickerscrlllview。可以确认的是,外面名字没有写错,那就是赋值这一步出错了:

pickerscrlllview = (PickerScrollView) findViewById(R.id.pickerscrlllview);

事实证明,包含有id为pickerscrlllview的那个xml文件没有被引用。后端小伙伴在合的时候复制了两行<include layout="@layout/picker_layout2" />然而并没有Include layout.xml,自然后续就报错了。

小心路径

如果你的程序报错android.view.InflateException: Binary XML file line #16: Binary XML file line #16: Error inflating
那么大概率是你粘了别人的代码,然而改路径没有改完。我自个儿用滚动选择器的时候就跟这个error斗争过了。不幸的是,我和后端小伙伴们的路径也不一样,他们也没改干净,因此在这里卡了很久。
不要以为没有红色就是改完了!看一眼xml文件,它不会红,但是它可能有问题:

        <com.example.cs.views.PickerScrollView
            android:id="@+id/pickerscrlllview"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="#ffffff" />

你看,这里也需要路径,但是如果你的路径是错的,它不会提示你(摊手)。

其它的都是些小问题啦,基本上搜一搜就出来了,就不记录了。
下周可能要赶一下计算机系统安全和计算机体系结构的实验,不知道这边能做多少,加油吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值