Complete C# code:
----------------
using System;
using System.ComponentModel;
using System.Configuration;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CustomGridView
{
///
最近在写一个关于某音的脚本,包含刷视频/点赞/收藏/分享/评论等一些列功能,借助于AutoX来实现,虽然我老早就买了AutoJs Pro 但是最新版本阉割的有点厉害。。。
="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password ="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password ="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password ="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password ="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password
& CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) || (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE; 在onTouchEvent方法的一开始,通过viewFlags去判断当前View的CLICKABLE或者LONG_CLICKABLE 默认情况下,在View初始化的时候会从xml读clickable属性或者longclickable属性。 所以在默认情况下Button的clickable=true。 通过下面这行代码(View.java的13743行)就可以知道,当clickable=true时, if (clickable || (viewFlags & TOOLTIP) == TOOLTIP){
return (((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE ) || (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE); } if (mTouchDelegate ) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) || (viewFlags ) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) || (viewFlags & CONTEXT_CLICKABLE) If this view is not * clickable, it becomes clickable.
代码实例如下: interface Clickable{ default void click(){ System.out.println("click"); } } interface Accessible { default void access(){ System.out.println("access"); } } public class Button implements Clickable, 结构图及实例代码如下: 网络配图 interface Clickable{ default void click(){ System.out.println("click"); } default void print(){ System.out.println("Clickable"); } } interface Accessible{ default void access(){ System.out.println , Accessible { public void print(){ Clickable.super.print(); Accessible.super.print(); } public static
//如果不可用 同时当前控件的clickable与long_clickable //与CONTEXT_CLICKABLE全是false //那么才返回false 与long_clickable //与CONTEXT_CLICKABLE 有一个为true 就进入次循环 if (((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) || (viewFlags //如果不可用 同时当前控件的clickable与long_clickable //与CONTEXT_CLICKABLE全是false //那么才返回false part2 /** *讲解二 */ //只要控件的clickable与long_clickable //与CONTEXT_CLICKABLE
防止按钮连点 import android.annotation.SuppressLint import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource canClick) { delay(delay) canClick = true } }) Modifier.clickable debouncedClickable { event(BtnType.UNINSTALL, appItem) }) { ZBtnView2("卸载") } 也就是把clickable ) inline fun Modifier.noRippleClickable(crossinline onClick: () -> Unit): Modifier = composed { clickable interactionSource = remember { MutableInteractionSource() }) { onClick() } } 使用方法: 把clickable
= ((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE ) || (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE; if ((viewFlags & return clickable; } if (mTouchDelegate ! clickable) { removeTapCallback(); removeLongPressCallback break; case MotionEvent.ACTION_CANCEL: if (clickable
1.clickable:控制当前view是否可以点击 2.longclickable:控制当前view是否可以长按 3.foucsable:是否可以获取当前view的焦点(一般用于edittext) 4 final boolean clickable = ((viewFlags & CLICKABLE) == CLICKABLE|| (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)|| (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE; ... 源码太多,这边我省略了部分源码,留了几个重点,我们可以看下clickable是通过或的关系得到的,也就是只要长按和点击有一个执行,那他为ture。 后面还有一段就是当clickable为false的时候移除所有的事件回调。
点击事件 Button Button ( onClick = { // 处理点击事件 }) { //... } Modifier.clickable 非Button处理点击事件 Box( modifier = Modifier.clickable { // 处理点击事件 } ) Modifier.combinedClickable 在单击事件之外,同时可以处理双击 在这里可以识别 click 手势,而且相应优先级高于 clickable,但是不会触发水波纹之类的效果 Box( modifier = Modifier .pointerInput ModifierFactoryUnreferencedReceiver") inline fun Modifier.noRippleClickable(crossinline onClick: ()->Unit): Modifier = composed { clickable onClick() } } 使用方式 Modifier .noRippleClickable() { callback(mList[it].appgroupid, it) } 也就是把之前的clickable
无法响应任何点击事件 //click.setEnabled(false); click.setOnClickListener(this); //只有在onClickListener事件之后设置clickable = ((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE ) || (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE; //如果当前view是disabled并且可以点击则消费事件 return clickable; } if (mTouchDelegate ! ) == LONG_CLICKABLE || (mViewFlags & TOOLTIP) == TOOLTIP) { mHasPerformedLongPress = false
final int action = event.getAction(); // 只要View的CLICKABLE和LONG_CLICKABLE有一个为true,onTouchEvent()就会 if ((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) || (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE) { switch(action) { case MotionEvent.ACTION_UP 5.View的onTouchEvent默认都会消耗事件(返回true),除非它是不可点击的(clickable和longClickable同时为false)。 View的longClickable属性默认都为false,clickable属性要分情况,比如Button的clickable属性默认为true,而TextView的clickable默认为false
actions: [] times: 0 - given: [] when: null then: [] xpath: "//*[contains(name(), 'Text') and @clickable text)<10]" action: null actions: [] times: 0 - given: [] when: null then: [] xpath: "//*[@clickable 'true']" action: null actions: [] times: 0 - given: [] when: null then: [] xpath: "//*[@clickable 有时候我们会遇见这种情况:设置了 clickable 未 true 的控件都被遍历,可是运行时发现很多控件都没有被遍历到,一般这种情况有一下两种原因: 元素属性 clickable 本身就为 false ='true']//*", action: click } 5)另外我们之前在 selectList 中写了 clickable=true, 而 clickable=true 通常只是布局元素,布局元素一般是没有任何属性的
= ((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE ) || (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE; // 从这段代码可知,即使不可用状态的控件也会消费事件 return clickable; } // mTouchDelegate是View的代理,有代理的情况下回调用代理的onTouchEvent方法。 赋值时我们可以知道,不管View是不是disable状态,只要它的CLICKABLE和LONG_CLICKABLE有一个为true时,它就会消耗这个事件。 clickable) { removeTapCallback(); removeLongPressCallback();
www.baidu.com") print(driver.title) WebDriverWait(driver, 10, 0.5).until(EC.element_to_be_clickable "u1"]/a[7]') element.click() WebDriverWait(driver, 10, 0.5).until(EC.element_to_be_clickable footerULoginBtn"]') element.click() WebDriverWait(driver, 10, 0.5).until(EC.element_to_be_clickable element.send_keys(yanzheng) WebDriverWait(driver, 10, 0.5).until( EC.element_to_be_clickable element.click() WebDriverWait(driver, 10, 0.5).until( EC.element_to_be_clickable
="true" @click="open('user-password')"></uni-list-item> <uni-list-item title="绑定邮箱" :clickable="true ="true" @click="open('user-password')"></uni-list-item> <uni-list-item title="绑定邮箱" :clickable="true " @click="open('user-email')"></uni-list-item> <uni-list-item title="资料编辑" :clickable="true" @click clickable && !link) || disabled || showSwitch ? == '') { this.openPage(); return; } if (this.clickable || this.link) { this.
onInterceptTouchEvent方法返回false View没有onInterceptTouchEvent() View的onTouchEvent默认会消耗事件(返回True),除非它是不可点击的——-clickable 和 longClickable同时为false.注意:View的longClickable默认都为false,clickable要根据控件属性判断。 = ((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE ) || (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE; if ((viewFlags & //即使disabled,也是可点击也会消费事件 return clickable; } if (mTouchDelegate !
[] times: -1 - given: [] when: null then: [] xpath: "//*[contains(name(), 'Text') and @clickable ]" action: "" actions: [] times: -1 - given: [] when: null then: [] xpath: "//*[@clickable ] times: -1 - given: [] when: null then: [] xpath: "//*[contains(name(), 'Image') and @clickable ]" action: "" actions: [] times: -1 - given: [] when: null then: [] xpath: "//*[@clickable [] times: -1 - given: [] when: null then: [] xpath: "//*[contains(@class, 'Text') and @clickable
和longClickable同时为false),View的longClickable默认为false,clickable需要区分情况,如Button的clickable默认为true,而TextView 的clickable默认为false。 只要CLICKABLE和LONG_CLICKABLE有一个为true,就一定会消费这个事件,就是onTouchEvent返回true。 默认为false,clickable需要区分情况,如Button的clickable默认为true,而TextView的clickable默认为false。 最后再强调一点,我们刚说过View的longClickable默认为false,clickable需要区分情况,如Button的clickable默认为true,而TextView的clickable默认为