日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Compose 手势事件:防止重复点击,双击,长按,全局触摸隐藏键盘

發布時間:2025/3/21 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Compose 手势事件:防止重复点击,双击,长按,全局触摸隐藏键盘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

JetPack Compose (后續簡稱compose) release版已經出來了三四個月了,雖然沒正式版之前也學過幾次,但一直沒有機會用,在加上api的變更,導致之前學的都忘完了,現在終于有機會寫一點(將原有項目的簡單頁面用compose重寫),發現了一些compose的優勢和劣勢:

優勢:

1.超容易封裝和組合,相對于原生自定義組合view,compose組合一個view簡直不要太簡單,只需要一個方法就能搞定,封裝也更簡便好用(組合vs繼承)

2.跨平臺,目前kotlin的跨平臺,compose ui是其中重大的一步,雖然目前跨平臺還不是正式版,平臺支持的也不全,但未來可期

3.響應式ui,響應式是未來的ui范式,如果吃透的話不管是開發效率還是bug出現幾率都可以大幅減少

4.互操作性,compose和kotlin一樣,都保持了優良的互操作性,這樣不管是推廣還是項目過度都能更平滑,這樣不僅新項目可以用,老項目也可以在某個頁面或某個布局位置使用compose,這么菜大佬的文章很好的講了這一點:?Jetpack Compose和View的互操作性 - 圣騎士wind - 博客園 (cnblogs.com)

5.代碼即時預覽,雖然目前不是很完善,只支持String之類的修改即時預覽,但是未來應該會有長足的進步.(即時預覽:不止是在Preview處,另一個地方是如果你跑在設備上,你在代碼處修改,設備上也會即時修改)

6.動態內容,比如你可以在compose中使用 if 或者 for 等進行流程控制,這在xml view體系中基本是不可能的

7.理論性能更好,因為compose使用了部分內容重組和并行執行,并且沒有xml加載和解析,所以性能理論上會更好,但目前大部分還是不如原生,但現在才1.0.1,有很多優化空間

8.如果你使用flutter可以很輕松的學會,并且比flutter更簡潔,語言更好用

劣勢:

1.學習成本高,學習曲線稍微陡峭,需要顛覆之前的view體系的view,動畫,手勢和三方庫之類的,需要一定勇氣

2.代碼要求較高,需要以函數式的要求來寫compose代碼,要求compose代碼冪等,無副作用,保持方法快速

3.嵌套地獄,可以通過抽方法解決(當然比flutter好點)

4.目前view組件比較基礎,很多需要自行封裝

5.現存資料較少,不過以后應該會慢慢多起來

正文

我就懶得寫各種api怎么用了,網上很多,官網也有,只寫一些可能需要自定義的東西

1.防止重復點擊

compose實現點擊事件很簡單,如下

Text(text = "", modifier = Modifier.clickable {//點擊回調})

但是實現防止重復點擊可能會麻煩些,如下:

const val VIEW_CLICK_INTERVAL_TIME = 800//View的click方法的兩次點擊間隔時間/*** 防止重復點擊(有的人可能會手抖連點兩次,造成奇怪的bug)*/ @Composable inline fun Modifier.click(time: Int = VIEW_CLICK_INTERVAL_TIME,enabled: Boolean = true,//中間這三個是clickable自帶的參數onClickLabel: String? = null,role: Role? = null,crossinline onClick: () -> Unit ): Modifier {var lastClickTime = remember { 0L }//使用remember函數記錄上次點擊的時間return clickable(enabled, onClickLabel, role) {val currentTimeMillis = System.currentTimeMillis()if (currentTimeMillis - time >= lastClickTime) {//判斷點擊間隔,如果在間隔內則不回調onClick()lastClickTime = currentTimeMillis}} }//使用如下,api基本沒有區別:Text(text = "", modifier = Modifier.click {//點擊回調})

2.Button的防止重復點擊

Button的點擊事件如下:

Button(onClick = {//點擊回調}) {}

可以看出onClick參數是一個()->Unit,所以我們只需要返回一個可以過濾重復點擊的()->Unit即可,如下所示:

/*** 防止重復點擊,比如用在Button時直接傳入onClick函數*/ @Composable inline fun composeClick(time: Int = VIEW_CLICK_INTERVAL_TIME,crossinline onClick: () -> Unit ): () -> Unit {var lastClickTime = remember { 0L }//使用remember函數記錄上次點擊的時間return {val currentTimeMillis = System.currentTimeMillis()if (currentTimeMillis - time >= lastClickTime) {//判斷點擊間隔,如果在間隔內則不回調onClick()lastClickTime = currentTimeMillis}} }使用如下:Button(onClick = composeClick {//點擊回調}) {}

3.雙擊

雙擊可以使用compose的基礎觸摸api:

/*** 雙擊事件*/ fun Modifier.doubleClick(onDoubleClick: (Offset) -> Unit): Modifier =//處理手勢反饋pointerInput(this) {//處理基礎手勢反饋detectTapGestures(onDoubleTap = onDoubleClick//雙擊時回調 // onPress = {}//按下時回調 // onLongPress = {}//長按時回調 // onTap = {}//輕觸時回調(按下并抬起))})}使用方式:Text(text = "", modifier = Modifier.doubleClick {//雙擊回調})

4.長按

長按也可以使用compose的基礎觸摸api:

/*** 長按事件*/ fun Modifier.longClick(onLongClick: (Offset) -> Unit): Modifier =pointerInput(this) {detectTapGestures(onLongPress = onLongClick)}使用如下:Text(text = "", modifier = Modifier.longClick {//雙擊回調})

5.全局觸摸隱藏鍵盤

全局觸摸自動隱藏鍵盤也是用到了基礎觸摸api,并使用我們常用的鍵盤工具類(可自行搜索),代碼如下:

/*** 在有鍵盤的頁面,設置在root compose上,點擊別處可以自動隱藏鍵盤*/ fun Modifier.autoCloseKeyboard(view: View): Modifier =pointerInput(this) {detectTapGestures(onPress = {KeyBoardUtil.hideKeyboard(view)//調用鍵盤工具類來隱藏鍵盤})}使用如下:Text(text = "", modifier = Modifier.autoCloseKeyboard(getRootViewGroup()))

結語

以后有好用的新東西在寫這個系列吧,畢竟目前用的不多

官方自定義view教學的視頻:?2021 Google 開發者大會,加入我們 Develop as One!

end

總結

以上是生活随笔為你收集整理的Compose 手势事件:防止重复点击,双击,长按,全局触摸隐藏键盘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美成人视 | 久久免费一级片 | 中日精品一色哟哟 | 波多野结衣一区二区三区四区 | 人人精品久久 | 黄色在线免费网站 | 91sao| 国产成人精品一区二三区 | 久久亚州| 在线视频中文字幕 | 美日韩一区二区三区 | 欧美成人一区在线观看 | 亚洲一区日韩精品 | 国产无套精品 | 蜜臀少妇久久久久久久高潮 | 欧美女优在线观看 | 日韩一区二区三区免费在线观看 | 丁香婷婷久久 | 日韩高清欧美 | 国产精品va | 深夜视频在线看 | 免费一二区 | 涩涩免费网站 | 日韩视频专区 | 亚洲美女爱爱 | 亚洲国内自拍 | 欧美一级色图 | 少妇人禽zoz0伦视频 | 青娱乐精品视频 | 日韩毛片在线视频 | 国产91精品一区二区绿帽 | 色一区二区三区四区 | 国产高清www| 又黄又骚又爽 | www在线免费观看 | 人体私拍套图hdxxxx | 日韩二区三区 | 青青青青青操 | 91成人在线观看国产 | 国产jk精品白丝av在线观看 | 毛片少妇 | 日本啪啪动态图 | 天天草天天干 | av免费网址在线观看 | 一本到在线观看 | 色人阁网站| 日本黄色美女网站 | 午夜宅男影院 | 日美韩av | 色秀视频在线观看 | 伊人成人动漫 | 成人免费在线视频 | 好吊色视频在线观看 | 精品自拍第一页 | 720url在线观看免费版 | 日韩欧美在线免费观看 | 一级伦理农村妇女愉情 | 大波大乳videos巨大 | 欧美一区二区三区久久精品 | 国产草草影院ccyycom | 超碰av人人 | 国产盗摄视频在线观看 | 国外av网站 | 国内精品视频 | 精品一区二区久久 | 69视频在线观看 | 免费麻豆视频 | 可以直接在线观看的av | 国产h视频在线 | 中文字幕成人网 | 久久久精品动漫 | 日本黄色小说 | 国产毛片毛片毛片毛片毛片 | 涩涩片影院 | 国产欧美大片 | 精品少妇一区二区三区免费观看 | 成年丰满熟妇午夜免费视频 | 中文字幕日韩国产 | 麻豆传媒一区二区三区 | 欧美日韩在线播放 | 快色在线| 欧美日韩国产免费一区二区三区 | 亚洲国产二区 | 日韩 欧美 综合 | 99re在线观看视频 | 久久久久久久久久久久Av | www.国产在线视频 | 精品国产一区在线 | 日韩视频在线观看二区 | 日本中文字幕高清 | 欧美日韩一区二区视频在线观看 | 成人免费视频a | 亚洲天堂av一区二区三区 | 天堂中文网| 91麻豆视频在线观看 | 色综合天天射 | 白石茉莉奈黑人 | 免费一区二区 | 中文字幕综合 |