網(wǎng)站開發(fā)語言查詢 蔡學(xué)鏞網(wǎng)絡(luò)營銷方法和手段
在開發(fā)Android TV時(shí),遇到了一個(gè)需求,需要對(duì)遙控器發(fā)出的上下左右按鍵點(diǎn)擊事件做處理。此處我們可以在Modifier.onKeyEvent中對(duì)按鍵事件做處理。此處我寫了一個(gè)按鈕的modifier模板如下。
private val buttonModifier = Modifier.onKeyEvent {when {KeyEventType.KeyDown == it.type -> {when (it.key) {Key.DirectionUp -> trueKey.DirectionDown -> trueelse -> false}}else -> false}
}
首先我們來看返回值。在這個(gè)模板中我對(duì)按鈕接收到上下按鍵不做處理,而這是通過返回true值實(shí)現(xiàn)的。返回的true表示該按鍵事件已被消費(fèi),將不會(huì)再傳遞到下一級(jí);而false則會(huì)繼續(xù)傳遞。此處我返回true可以使得焦點(diǎn)無法向上或向下傳遞,相應(yīng)的,返回false將不會(huì)阻礙焦點(diǎn)傳遞。
其次是監(jiān)聽按鍵的類型。此處我對(duì)傳入的KeyEvent的type和key兩個(gè)值做了過濾,前者包括KeyDown和KeyUp以及Unknown三個(gè)狀態(tài),分別代表按下按鍵、抬起按鍵以及未知的按鍵事件;后者則反映了具體點(diǎn)擊的是什么按鍵。
后續(xù)可以引用這個(gè)模板,并對(duì)其進(jìn)行更進(jìn)一步的定制。
Button(onClick = { // button的點(diǎn)擊事件 },modifier = buttonModifier.onKeyEvent {when {KeyEventType.KeyDown == it.type && Key.DirectionRight == it.key -> {// 對(duì)向右按鍵的事件響應(yīng)false}else -> false}}
) {Text(text = "+")
}