android onclick事件(android onclick事件和ontouch事件是否会冲突)

本文目录
- android onclick事件和ontouch事件是否会冲突
- android中如何利用onclick事件启动线程
- Android源码追踪—android:onClick
- android onclick是怎样实现的
android onclick事件和ontouch事件是否会冲突
Button的onTouch,onClick,onLongClick事件发生先后顺序和关联:
一,onTouch返回false
首先是onTouch事件的down事件发生,此时,如果长按,触发onLongClick事件;
然后是onTouch事件的up事件发生,up完毕,最后触发onClick事件。
二,onTouch返回true
首先是onTouch事件的down事件发生,然后是onTouch事件的up事件发生;期间不触发onClick和onLongClick事件
三,onTouch:down返回true,up返回false:结果同二。
机制分析:
onTouch事件中:down事件返回值标记此次事件是否为点击事件(返回false,是点击事件;返回true,不记为点击事件),而up事件标记此次事件结束时间,也就是判断是否为长按。
只要当down返回true时候,系统将不把本次事件记录为点击事件,也就不会触发onClick或者onLongClick事件了。因此尽管当up的时候返回false,系统也不会继续触发onClick事件了。
四,onTouch:down返回false,up返回true:
首先是onTouch事件的down事件发生,此时:
长按,触发onLongClick事件,然后是onTouch事件的up事件发生,完毕。
短按,先触发onTouch的up事件, 到一定时间后,自动触发onLongClick事件。
机制分析:
onTouch事件中:down事件返回值标记此次事件是否为点击事件(返回false,是点击事件;返回true,不记为点击事件),而up事件标记此次事件结束时间,也就是判断是否为长按。
当down返回false,标记此次事件为点击事件,而up返回了true,则表示此次事件一直没有结束,也就是一直长按下去了,达到长按临界时间后,自然触发长按事件,而onClick事件没有触发到
android中如何利用onclick事件启动线程
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
}
};
Android源码追踪—android:onClick
之前对源码的阅读,总是用时一通乱七八糟的跳转,以学会使用为目的;过了一段时间,就忘记了,因此打算将一些源码的阅读经历记录下来,也通过敲一遍的过程,加深理解。
最开始,用一个比较简单的例子来小试牛刀吧
对于View(Button、TextView等)的点击事件,常用的写法是通过 findViewById 获取View的实例,然后通过 setOnClickListener 设置监听事件,比如我们有如下Button控件。
设置点击事件(假设在Activity中)
但是还有一种写法是在xml布局中通过android:onClick属性直接指定点击执行的函数。
【思考】
首先我们知道诸如 android:xxx 之类的属性是会在某个attrs文件中定义的,此处的 android:onClick 是View的属性,定义在如下文件中。
在View的构造函数中,会解析出此属性的值。
看这里, 如果变量handlerName不为空,就会为此View设置点击事件了 ,这个handlerName就是onClick属性的值doSubmit,但这个点击事件,并不是我们所熟悉的OnClickListener。
进一步看看这个 DeclaredOnClickListener 类
DeclaredOnClickListener 实现了 OnClickListener ,其中重点是参数 mResolvedMethod 和 mResolvedContext 。
在onClick事件中最终通过反射 mResolvedMethod.invoke(mResolvedContext, v); 执行了doSubmit方法。
doSubmit的访问权限是否可以设置为private呢?
答案:不可以,因为源码中没有调用 mMethod.setAccessible(true); 注入所有修饰符。
其实在onClick属性的注释中就已经说明了。
android onclick是怎样实现的
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
TextView textview = (TextView)findViewById(R.id.textView1);
textview.setText("Button");
}
});
这种方式用findviewbyid通过id实例化出来这个button,然后通过设置button的listener监听对象,并同时实现接口OnClickListenter的OnClick()方法。这种方式的代码量不多,但是在java中,面向对象的思想,关于耦合,模块化它达不到。代码堆叠在一起,比较臃肿。

更多文章:
数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)
2026年9月7日 17:00
springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)
2026年9月7日 14:00
display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)
2026年9月7日 11:00
timestamp without time zone(Postgresql中to_date()函数使用问题)
2026年9月7日 09:40




