0.前言
- 上一篇文章中,我们讲解了Android的几种布局方式
有兴趣的可以去看一看准备工作
在读本文前,你最好有以下准备:
- (1)安装Android Stuido(以下简称AS)
- (2)有一定的Java基础
- (3)有一台安卓机
(可以用模拟器来代替,包括AS自带的以及网上的一些著名模拟器)- 若想要了解有关Java的文章等其他主要知识,可以去看前面的文章
(不会使用AS的读者可以参考下面这篇文章中的例子)
《[Java]开发安卓,你得掌握的Java知识2》

1.本文内容简介
-
触摸事件处理
-
使用Tag查找子控件
-
通过sharedPreference来存储简单数据

2.基础知识讲解
触摸事件处理
- 触摸事件处理有两种方法:
(1)回调机制
(2)监听机制方法1 监听机制
这种方法会设置一个监听器(listener),用来记录监听者。
监听者必须实现对应的接口,因此监听者要重写触发事件时运行的方法。
当事件触发的时候,会看到底是谁在监听(找监听者)。然后通过调用监听者重写的方法,完成触发事件方法2 回调机制
这种方法中,可以看作监听器不存在,事件监听器与事件源统一。即用户在组件上触发某个事件时,组件会调用自己的方法以处理该事件。
- 如果不太懂接口与回调的读者可以阅读这篇文章:
《[Java]开发安卓,你得掌握的Java知识7》具体代码和语法在第3部分

通过tag来获得子控件
在xml文件中添加的控件,我们需要为其添加id,这样才能在java文件中用id获取指定的控件
而在java文件中添加的控件,则可以为其添加tag,以此在其他地方找到对应的控件
添加语句:
int tag = 1;
ImageView iv = new ImageView(this)
lineView.setTag(tag)
android有四个组件,分别为activity、broadcast、contentprivider、service。在当前的activity中用的是mainactivity.this
通过tag获取控件:
ImageView iv2
iv2.getTag(tag)
这里的tag就是上面设置的那个,注意set/getTag的参数都是int

通过sharedPreference来存储简单数据
java一共有四种方式存储数据:
(1)sharedPreference(偏好设置)(保存少量基本数据)
(2)file
(3)sqlite3(保存数据量比较大的数据,保存到服务器端的数据库中)
(4)network(只有这种不是保存在本地)sharedPreference会保存在设备中的一个xml文件中
由于是在xml中保存的,所以不是适合存储大量数据,一些设置选项可以考虑保存在这里
sharedPreference的使用分为读和写两部分,分别对应两个对象
最后一定要使用.commit()或者.apply()来保存,它们的区别:
editor.commit();//立刻保存
editor.apply();//异步保存,让一个线程处理保存,不是马上在Device File Exploer->data->data->项目名->shared_prfes->文件名.xml
具体代码,以及数据保存在哪里,在下文说

3.实际操作
触摸事件——监听机制
第一步 打开activity_main.xml
![]()
第二步 把布局改一下(为了方便写代码)
![]()
第三步 添加一个控件
<ImageView
android:id="@+id/box"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@color/colorPrimary"
android:layout_centerInParent="true"/>
![]()
![]()
第四步 打开MainActivity,并找到这个控件
![]()
- 在onCreate中,用id找到这个控件
ImageView iv = findViewById(R.id.box);
这里的R.id.box表示res中的id名为box的控件
( android:id="@+id/box")这句话添加了id第五步 给这个控件添加监听器
直接在控件后面输入一个点.,然后输入setOnTouch。。。看到可以选择之后直接回车
接着在括号内,先看它需要什么参数(按ctrl+p),然后先输入一个new,然后照着需要的参数的类型输入,就可以看到
![]()
![]()
回车之后就变为:
![]()
最后在方法里面书写触发事件时,需要执行的内容
![]()
(这里要按照图里一样,把return 的值改为true)以上即为比较常用的,通过匿名类来处理监听机制

其他相关的监听方法:
(1)在括号内不写new什么的,而写一个this,表示当前的这个界面
然后在this(低下会画红线)旁边按alt+enter,选择有implement那个,表示这个MainActivity实现这个接口
![]()
选择要实现的方法之后,在这个方法写具体内容即可
![]()
![]()

(2)可以单独创建一个实现该接口的类,然后创建一个这个类的对象,放在括号中,而不是使用匿名类
- 使用匿名类一般是只需要处理这一个事件。如果有多个时间,可以考虑创建一个类,或者是使用方法(1)

触摸事件——回调机制
第一步 找到要触发这个事件的类(如果是整个屏幕,就找MainActivity)
第二步在里面写onTouchEvent(MotionEvent event)这个方法
当触摸事件被触发的时候,系统就会回调这个被重写的方法
如果是写在MainActivity中的话,这个方法要写在onCreate外面
![]()
- return要改为true
这里可以使用event.getAction这个方法,它返回的是一个int,不同的int代表着不同的时间,而Motion.事件名则分别对应这事件(Motion.事件名是已经被定义好的int)
![]()
表示如果有按下的事件

通过sharedPreference来存储简单数据
语法顺序如下:
SharedPreferences sp = getSharedPreferences(fileName,MODE_PRIVATE);
其中,fileName为文件名,MODE_PRIVATE代表该文件是私有数据然后,通过以下语句,存储密码
SharedPreferences.Editor editor = sp.edit();
editor.putString("password",inputPassword);
editor.commit();
- 其中,inputPassword是需要存储的值,"password"是这个值的“键”(一个名字),就是通过这个名字,可以找到inputPassword
- 必须有editor.commit()进行保存(第二部分有说过两种保存的方式)
String orgPassword = sp.getString("password",null);
用这句话来获得SharedPreference所存的xml文件中对应值的内容
- null表示如果没有名字叫password的,那么返回一个null
3.总结
(1)触发事件的方法需要熟练清楚,在后面的内容中经常需要使用到这些
(2)如果需要给某些控件代号的话,可以用setTag,然后到时候用getTag就能分辨到底是哪个控件
(3)SharedPreference只能存储少量数据
网友评论