开发者作品:一款智能家居系统,实现了 4 种控制方式(二)

前言
本项目通过阐述基于esp8266作为处理器(soc模式开发)接入机智云,借助机智云安卓开源框架设计的app,实现了灯的控制、门禁的控制、温湿度的读取、有毒气体的检测、人体红外检测等功能。
通过改造机智云开源框架,还实现了一个智能硬件系统支持多种控制方式,如:安卓app控制、本地按键控制、红外遥控控制、天猫精灵控制,且每一种操作都能和app同步显示。
本文是第二篇:ui界面编写
1.打开gosdevicecontrolactivity这个类2.导入ui使用到的图片3.编写ui界面详解4.下载到真题验证 
5.编写密码输入的ui界面
进入正文
编写机智云安卓开源框架的ui界面,需要修改的是控制模块的部分
1.打开gosdevicecontrolactivity这个类
找到oncreate()方法:
删除不必要的东西,如下图所示:
注意,因为在gosdevicecontrolactivity.java中引用了我们删除的控件,所以在gosdevicecontrolactivity也必须把这个引用删除,否则因为找不到对应的控件导致错误。
2.导入ui使用到的图片
 把我们在ui需要适用到的图片导入drawable,以便引用,文件如下
复制到如下的路径:
3.编写ui界面详解:
因为所有控件一个页面是显示不下的,所以此处需要使用一个 scrollview ,使ui界面可以上下滑动
scrollview具体使用方法:
https://blog.csdn.net/qq_36243942/article/details/82185051
                   android:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=vertical > android:layout_width=match_parentandroid:layout_height=match_parentandroid:background=@drawable/background02android:fadingedge=verticalandroid:paddingbottom=10dpandroid:paddingtop=20dpandroid:scrollbars=vertical>  注意此处修改了背景为刚才我们导入的背景图片,视图如下:
在最上边编写一个复位按钮,用来复位大灯,以及门禁系统:
也就是如下的界面:
在scrollview中新建一个根布局为线性布局(linearlayout)
备注:
1.控件布局相关知识:
https://blog.csdn.net/qq_36243942/article/details/81736744
2.线性布局相关知识:
https://blog.csdn.net/qq_36243942/article/details/81808833
2.为了让按钮看起来更美观,且有按下的效果,我们自己新建一个selector布局,然后引用这个布局文件
步骤:
                                 关于如何自定义按钮属性:https://blog.csdn.net/qq_36243942/article/details/82113312
ui界面代码如下:
                                                       android:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=vertical > android:layout_width=match_parentandroid:layout_height=match_parentandroid:background=@drawable/background02android:fadingedge=verticalandroid:paddingbottom=10dpandroid:paddingtop=20dpandroid:scrollbars=vertical> android:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=verticalandroid:scrollbars=verticalandroid:weightsum=1> android:id=@+id/reset_buttonidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_marginleft=300dpandroid:background=@drawable/btn_beselectedandroid:text=复位 /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=35dpandroid:gravity=centerandroid:text=大灯开关面板android:textcolor=#f86354android:textsize=30dp /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>     
备注:在button控件的background中引用这个drawable文件
界面如下:
完成大灯控制的ui界面
如下:
这个按钮使用的控件是checkbox,当这个checkbox未被选中时,显示红色的图片,并显示开关状态为关,如果checkbox被选中那么现实绿色的图片,并显示状态为开。
备注:
1.checkbox的使用方法:https://blog.csdn.net/qq_36243942/article/details/81744237
2.创建一个selector布局,设置选中显示显示绿色,未选中选择红色
步骤:
代码如下:
          android:state_checked=true> android:state_checked=false> 详细代码代码如下:
                                                                                                                          android:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=vertical > android:layout_width=match_parentandroid:layout_height=match_parentandroid:background=@drawable/background02android:fadingedge=verticalandroid:paddingbottom=10dpandroid:paddingtop=20dpandroid:scrollbars=vertical> android:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=verticalandroid:scrollbars=verticalandroid:weightsum=1> android:id=@+id/reset_buttonidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_marginleft=300dpandroid:background=@drawable/btn_beselectedandroid:text=复位 /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=35dpandroid:gravity=centerandroid:text=大灯开关面板android:textcolor=#f86354android:textsize=30dp /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=match_parentandroid:layout_marginleft=100dpandroid:layout_weight=0.10android:orientation=vertical> android:id=@+id/tv_redidandroid:layout_width=match_parentandroid:layout_height=match_parentandroid:text=大厅灯开关:关android:textallcaps=falseandroid:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/checkbox01_idandroid:layout_width=150dpandroid:layout_height=85dpandroid:background=@drawable/selecter02_cbandroid:button=@null /> android:id=@+id/tv_greenidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_margintop=5dpandroid:text=食厅灯开关:关android:textallcaps=falseandroid:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/checkbox02_idandroid:layout_width=150dpandroid:layout_height=85dpandroid:background=@drawable/selecter02_cbandroid:button=@null /> android:id=@+id/tv_blueidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=卧室灯开关:关android:textallcaps=falseandroid:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/checkbox03_idandroid:layout_width=150dpandroid:layout_height=85dpandroid:background=@drawable/selecter02_cbandroid:button=@null />    备注:每个checkbox的background属性都需要引用selector02_cb这个文件
整体界面如下:
完成门禁开关面板的ui界面设计
如下:
这两个按钮实用的控件上imagebutton
备注:
1.imagebutton的使用:https://blog.csdn.net/qq_36243942/article/details/81783895
在上面的基础增加一个线性布局,注意此时线性布局的方向应该是水平的。
整体代码如下:
                                                                                                                                                                      android:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=vertical > android:layout_width=match_parentandroid:layout_height=match_parentandroid:background=@drawable/background02android:fadingedge=verticalandroid:paddingbottom=10dpandroid:paddingtop=20dpandroid:scrollbars=vertical> android:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=verticalandroid:scrollbars=verticalandroid:weightsum=1> android:id=@+id/reset_buttonidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_marginleft=300dpandroid:background=@drawable/btn_beselectedandroid:text=复位 /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=35dpandroid:gravity=centerandroid:text=大灯开关面板android:textcolor=#f86354android:textsize=30dp /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=match_parentandroid:layout_marginleft=100dpandroid:layout_weight=0.10android:orientation=vertical> android:id=@+id/tv_redidandroid:layout_width=match_parentandroid:layout_height=match_parentandroid:text=大厅灯开关:关android:textallcaps=falseandroid:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/checkbox01_idandroid:layout_width=150dpandroid:layout_height=85dpandroid:background=@drawable/selecter02_cbandroid:button=@null /> android:id=@+id/tv_greenidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_margintop=5dpandroid:text=食厅灯开关:关android:textallcaps=falseandroid:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/checkbox02_idandroid:layout_width=150dpandroid:layout_height=85dpandroid:background=@drawable/selecter02_cbandroid:button=@null /> android:id=@+id/tv_blueidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=卧室灯开关:关android:textallcaps=falseandroid:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/checkbox03_idandroid:layout_width=150dpandroid:layout_height=85dpandroid:background=@drawable/selecter02_cbandroid:button=@null />  android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:id=@+id/textview7android:layout_width=match_parentandroid:layout_height=35dpandroid:gravity=centerandroid:text=门禁开关面板android:textcolor=#f86354android:textsize=30dp /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=wrap_contentandroid:layout_margintop=10dpandroid:layout_weight=0.24android:orientation=horizontal> android:id=@+id/iv_buttonidandroid:layout_width=100dpandroid:layout_height=100dpandroid:layout_marginleft=40dpandroid:background=@drawable/mybtnopen /> android:id=@+id/iv_closebuttonidandroid:layout_width=100dpandroid:layout_height=100dpandroid:layout_marginleft=80dpandroid:background=@drawable/mybtnclose />    整体界面如下:
接下来就是温湿度检测,有毒气体,以及红外检测等一些textview的设置,就不一一贴出来了,整体代码如下:
                                                                                                                                                                                                                                                                                                                                                                                                                        android:orientation=verticalandroid:layout_width=match_parentandroid:layout_height=match_parent> android:layout_width=match_parentandroid:layout_height=match_parentandroid:background=@drawable/background02android:fadingedge=verticalandroid:paddingbottom=10dpandroid:paddingtop=20dpandroid:scrollbars=vertical> android:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=verticalandroid:scrollbars=verticalandroid:weightsum=1> android:id=@+id/reset_buttonidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_marginleft=300dpandroid:background=@drawable/btn_beselectedandroid:text=复位 /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=35dpandroid:gravity=centerandroid:text=大灯开关面板android:textcolor=#f86354android:textsize=30dp /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=match_parentandroid:layout_marginleft=100dpandroid:layout_weight=0.10android:orientation=vertical> android:id=@+id/tv_redidandroid:layout_width=match_parentandroid:layout_height=match_parentandroid:text=大厅灯开关:关android:textallcaps=falseandroid:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/checkbox01_idandroid:layout_width=150dpandroid:layout_height=85dpandroid:background=@drawable/selecter02_cbandroid:button=@null /> android:id=@+id/tv_greenidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_margintop=5dpandroid:text=食厅灯开关:关android:textallcaps=falseandroid:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/checkbox02_idandroid:layout_width=150dpandroid:layout_height=85dpandroid:background=@drawable/selecter02_cbandroid:button=@null /> android:id=@+id/tv_blueidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=卧室灯开关:关android:textallcaps=falseandroid:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/checkbox03_idandroid:layout_width=150dpandroid:layout_height=85dpandroid:background=@drawable/selecter02_cbandroid:button=@null />  android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:id=@+id/textview7android:layout_width=match_parentandroid:layout_height=35dpandroid:gravity=centerandroid:text=门禁开关面板android:textcolor=#f86354android:textsize=30dp /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=wrap_contentandroid:layout_margintop=10dpandroid:layout_weight=0.24android:orientation=horizontal> android:id=@+id/iv_buttonidandroid:layout_width=100dpandroid:layout_height=100dpandroid:layout_marginleft=40dpandroid:background=@drawable/mybtnopen /> android:id=@+id/iv_closebuttonidandroid:layout_width=100dpandroid:layout_height=100dpandroid:layout_marginleft=80dpandroid:background=@drawable/mybtnclose />  android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_marginleft=30dpandroid:layout_margintop=30dpandroid:orientation=horizontal> android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=门禁状态指示:android:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/tv_indicateidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=关闭android:textcolor=#ffff00android:textsize=20dp />  android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:id=@+id/textview8android:layout_width=match_parentandroid:layout_height=35dpandroid:gravity=centerandroid:text=温湿度检测android:textcolor=#f86354android:textsize=30dp /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>   android:layout_width=match_parentandroid:layout_height=match_parentandroid:layout_marginbottom=1dpandroid:layout_margintop=20dpandroid:orientation=horizontalandroid:padding=50dp> android:id=@+id/textview4android:layout_width=wrap_contentandroid:layout_height=match_parentandroid:text=大气温度android:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/tv_data_tempandroid:layout_width=110dpandroid:layout_height=match_parentandroid:layout_marginleft=30dpandroid:textcolor=@color/greenandroid:textsize=30dp />   android:layout_width=match_parentandroid:layout_height=wrap_contentandroid:layout_marginbottom=1dpandroid:layout_weight=0.03android:orientation=horizontalandroid:padding=50dp> android:id=@+id/textviewandroid:layout_width=wrap_contentandroid:layout_height=match_parentandroid:layout_centervertical=trueandroid:text=相对湿度android:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/tv_data_humandroid:layout_width=110dpandroid:layout_height=match_parentandroid:layout_alignparentright=trueandroid:layout_centervertical=trueandroid:layout_marginleft=30dpandroid:gravity=endandroid:textcolor=@color/greenandroid:textsize=30dp />  android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:id=@+id/textview6android:layout_width=match_parentandroid:layout_height=35dpandroid:gravity=centerandroid:text=有毒气体检测android:textcolor=#f86354android:textsize=30dp /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=wrap_contentandroid:layout_marginbottom=1dpandroid:layout_weight=0.03android:padding=50dp> android:layout_width=wrap_contentandroid:layout_height=match_parentandroid:layout_centervertical=trueandroid:text=气体监测android:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/tv_gsa_detectionandroid:layout_width=110dpandroid:layout_height=match_parentandroid:layout_alignparentright=trueandroid:layout_centervertical=trueandroid:gravity=endandroid:textcolor=#ff0000android:textsize=30dp />  android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=35dpandroid:gravity=centerandroid:text=红外感应检测android:textcolor=#f86354android:textsize=30dp /> android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>  android:layout_width=match_parentandroid:layout_height=wrap_contentandroid:layout_marginbottom=1dpandroid:layout_weight=0.03android:padding=50dp> android:id=@+id/textview5android:layout_width=wrap_contentandroid:layout_height=match_parentandroid:layout_centervertical=trueandroid:text=人体检测android:textcolor=#33ff99android:textsize=20dp /> android:id=@+id/tv_body_moveandroid:layout_width=wrap_contentandroid:layout_height=match_parentandroid:layout_alignparentright=trueandroid:layout_centervertical=trueandroid:gravity=endandroid:textcolor=#ff0000android:textsize=30dp />  android:layout_width=wrap_contentandroid:layout_height=match_parentandroid:orientation=horizontal> android:id=@+id/reset_detnumidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_marginleft=30dpandroid:background=@drawable/btn_beselectedandroid:text=复位检测 /> android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text= 检测次数统计:android:textcolor=#ca8687android:textsize=20dp /> android:id=@+id/tv_det_timesidandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text= 0次android:textcolor=#1d953fandroid:textsize=20dp />  android:layout_width=match_parentandroid:layout_height=2dpandroid:background=@color/alert_blue>    整体ui界面效果如下:
4.下载到真题验证 
 修改完了ui界面之后,就可以下载到真题上体验一下:
步骤:
4.1.进入机智云官网,打开你的项目,打开虚拟设备
4.2.点击二维码
4.3.使用app扫描
4.4.扫描后进入
4.5.接下来就可以看到我们写的ui界面啦
5.编写密码输入的ui界面 
 到了这一步好像ui设计已经全部完成了,但是上面还有一个门禁的activity哦,就是当你按门禁开关面板的红色绿色按钮时,
进入密码输入界面,输入正确的密码则打开门禁,否则不打开。
在这里使用intent进行activity的跳转
备注:
5.1.何为intent//blog.csdn.net/qq_36243942/article/details/81938476
步骤:
5.1.1.在controlmodule新建一个空的activity
5.1.2.填写activity的名称和所对应layout的名称,android stuio会自动
5.1.3.编写activitylock.xml文件
代码如下:
                                                           android:layout_width=match_parentandroid:layout_height=match_parentandroid:background=#d1eeeeandroid:orientation=vertical> android:layout_width=368dpandroid:layout_height=wrap_contentandroid:orientation=verticalandroid:gravity=center> android:layout_width=match_parentandroid:layout_height=wrap_contentandroid:text=请输入门禁密码android:textsize=25dpandroid:gravity=centerandroid:layout_margintop=30dp/> android:id=@+id/ed_passward_idandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:hint=请输入密码 /> android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:orientation=horizontal> android:id=@+id/bt_sure_idandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=确定android:layout_marginleft=200dp/> android:id=@+id/bt_cancle_idandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=取消/>  android:id=@+id/tv_reciveidandroid:layout_width=match_parentandroid:layout_height=match_parentandroid:text=android:textsize=25dpandroid:gravity=centerandroid:layout_margintop=30dp/>  界面如下:
到这里所有的ui界面已经设计完成了,接下来就是需要写控制代码了。
(控制代码实现参考本系列文章第一篇)
————————————————
版权声明:本文为csdn博主「冷暖自知_源」的原创文章,遵循cc 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36243942/article/details/88577979

TCM809至双向复位I/O 的接口电路
减速电机的减速比究竟是什么?
目前各国机器人产业的发展现状分析
国芯思辰|地芯科技4通道14位数模转换器SX2175兼容LTC2175用于工业数据采集仪,采样率125Msps
低压中性点不接地电网
开发者作品:一款智能家居系统,实现了 4 种控制方式(二)
【01Studio x 嘉楠科技】CanMV K210 AI开发板全网首发,千套开发板限时优惠!
大厂对Rust的态度,C++之父回应
一位国外女IT工程师的职场感悟
HarmonyOS的出现,解决的就是割裂的局面
5G SA市场几乎处于停滞状态
传LG退出智能手机市场 官方发声:正讨论所有方案 包括出售
使用Arduino的Sinewave逆变器的制作
带你了解双绞线电缆类别
布局六大“强芯工程” 深圳市要建成具有国际竞争力的集成电路产业集群
中国智慧城市市场规模分析!智慧城市与平安城市的共同点!
这款三维空间导航模块,为您的巡检机器人赋能
拓展摩尔定律推动MEMS/NEMS技术演进
ADI与您相约2023进博会,感受边缘智能多样精彩
DSP28335学习笔记(4):中断向量表初始化