根据上一节的设计,我们的APP界面已经完成,但是botton和checkbox没有任何的功能,
只是一个简单的装饰部件。接下来我们实现APP的软件操作,为部件关联具体的功能。
button
在AndrodStudio(下面简称AS)软件界面,使用
A
n
d
r
o
i
d
\color{red}{Android}
Android模式查看工程,可以看到app 与 Gradle Scripts。
展开如下
在app-> res-> layout -> content_mian.xml(只做参考,不同工程略有差异)文件中,
.....
<Button
android:id="@+id/BUTTON"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ALL OFF"/>
.....
xml的语言比较好理解,这里描述了一个button,他的id为"@+id/BUTTON",后续部分我们会使用到该id,该button显示的宽度为满屏,高度为自动调节,并且其中的初始显示文本为"ALL OFF"。这样的一段代码描述之后,就简单的实现了一个button部件。虽然这个button虽然可以点击,但是没有任何的功能,基本的打印都不能实现,下面我们为这个button添加功能。
打开app-> java-> com.example.administrator,我们可以看到文件MainActivity.java文件,其中有一个
p
r
o
t
e
c
t
e
d
\color{red}{protected}
protected
v
o
i
d
\color{red}{void}
void
o
n
C
r
e
a
t
e
\color{red}{ onCreate}
onCreate
这个方法会在在APP启动的时候就会被调用,在这个方法内部加入代码如下:
button (Button)findViewById(R.id.BUTTON)
创建一个button对象,并且指定其id为BUTTON,与xml文件中 android:id="@+id/BUTTON"对应,这样就与界面的button绑定在一起了,我们在MainActivity.java文件中对button的操作也是对界面button的操作。
别忘记我们的目的是通过APP点亮LED灯,其中button是总开关,当客户点击button时,我们肯定需要调用一个函数关闭或者打开LED,当然这个函数肯定时应用层的,没有办法真正的去点亮LED,对硬件的操作,后续章节进行讲解。
创建出一个botton对象之后,绑定其点击执行函数,添加代码如下
button.setOnClickListener(new MyButtonListener());
这样,当我们点击button的时候,就会执行函数 MyButtonListener(),这个函数做什么呢?当然不是点亮就是熄灭,我们先做一个简单的框架,仅仅设置一下初始化显示的文字,后续章节在慢慢填充,代码如下:
class MyButtonListener implements View.OnClickListener {
@Override
public void onClick(View view) {
button.setText("ALL OFF");
}
}
这样,最初始的button就出来了,后续点击button去完成点灯,灭灯,只需在该函数内部继续添加相应代码即可。
checkbox
经过前面的设计,对于checkbox的实现就相对简单了,依葫芦画瓢即可,同样还是在app-> res-> layout -> content_mian.xml文件中,
有如下代码
<CheckBox
android:id="@+id/LED1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="LED1"
android:onClick="onCheckboxClicked"/>
<CheckBox
android:id="@+id/LED2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="LED2"
android:onClick="onCheckboxClicked"/>
和前面类似的在此就不进行讲解了,此处不同的地方在于 a n d r o i d : o n C l i c k = " o n C h e c k b o x C l i c k e d " \color{red}{android:onClick="onCheckboxClicked"} android:onClick="onCheckboxClicked"(该代码为问我们自行填写),根据英语我们可以很容易的理解到,点击Checkbox时,会执行函数onCheckboxClicked。故此,我们需要在MainActivity.java文件中,实现该函数,同样我们还是只做简单的框架搭建,后续再实现对硬件的操作,代码如下
public void onCheckboxClicked(View view) {
boolean checked = ((CheckBox) view).isChecked();
switch(view.getId()) {
case R.id.LED1:
if (checked) {
Toast.makeText(getApplicationContext(), "LED1 on", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(getApplicationContext(), "LED1 off", Toast.LENGTH_SHORT).show();
}
break;
case R.id.LED2:
if (checked) {
Toast.makeText(getApplicationContext(), "LED2 on", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(getApplicationContext(), "LED2 off", Toast.LENGTH_SHORT).show();
}
break;
}
}
首先,我们可以看到调用了
b
o
o
l
e
a
n
c
h
e
c
k
e
d
=
(
(
C
h
e
c
k
B
o
x
)
v
i
e
w
)
.
i
s
C
h
e
c
k
e
d
(
)
;
\color{red}{ boolean checked = ((CheckBox) view).isChecked();}
booleanchecked=((CheckBox)view).isChecked();
理由很简单,两个Checkbox共用一个函数,当然需要确定是那个Checkbox被点击。
T
o
a
s
t
.
m
a
k
e
T
e
x
t
\color{red}{Toast.makeText}
Toast.makeText起一个提示框的作用,当我们点击Checkbox,浮现出当前LED的状态
回顾
该小节简单的介绍了一下,AS界面部件怎么和具体功能联系在一起,下小节正式步入JNI
第一次写博客,不足之处,请多多包含。