視覚的な手がかりを提供して、焦点をわかりやすく可視化する
マテリアル テーマのフォーカス可能なすべての要素にはすでにフォーカス スタイルがありますが、 使用する場合は、視覚要素を追加して 要素を特定しやすくなります。良い解決策は、境界線を 要素は、背景とのコントラストがはっきりした色で使用してください。
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
この例では、remember
を使用して枠線の色を保存しています。
再コンポーズされ、要素のアウトラインは要素が
焦点をあてたり失ったりします
高度なビジュアル キューを実装する
Jetpack Compose では、より洗練された高度なビジュアル コンテンツも UI に合わせたキューを作成できます。
- まず、UI に必要なキューを視覚的に描画する
IndicationInstance
を作成します。private class MyHighlightIndicationInstance(isEnabledState: State<Boolean>) : IndicationInstance { private val isEnabled by isEnabledState override fun ContentDrawScope.drawIndication() { drawContent() if (isEnabled) { drawRect(size = size, color = Color.White, alpha = 0.2f) } } }
- 次に、
Indication
を作成し、フォーカスされた状態を記憶します。class MyHighlightIndication : Indication { @Composable override fun rememberUpdatedInstance(interactionSource: InteractionSource): IndicationInstance { val isFocusedState = interactionSource.collectIsFocusedAsState() return remember(interactionSource) { MyHighlightIndicationInstance(isEnabledState = isFocusedState) } } }
indication()
修飾子を使用して、Indication
とInteractionSource
の両方を UI に追加します。val highlightIndication = remember { MyHighlightIndication() } var interactionSource = remember { MutableInteractionSource() } Card( modifier = Modifier .clickable( interactionSource = interactionSource, indication = highlightIndication, enabled = true, onClick = { } ) ) {}
フォーカスの状態を理解する
通常、フォーカスの状態が変化するたびに、FocusEvent
が発生します。
され、focusable()
修飾子の親は
onFocusChanged()
修飾子。
フォーカスの状態を把握する必要がある場合は、これらの API を組み合わせて使用できます。
onFocusChanged
修飾子を使用します。
isFocused
は、修飾子が適用されているコンポーザブルがtrue
を返します。 焦点を当てているhasFocus
はisFocused
と似ていますが、大きな違いがあります。 現在の要素のみではなく、要素またはそのいずれかが 子どもたちはisCaptured
は、フォーカスが保持されているときは常にtrue
を返します。これはTextField
に誤ったデータが含まれているため、 フォーカスはクリアされません。
その内容は以下のとおりです。
Modifier.onFocusChanged {
val isFocused = it.isFocused
val hasFocus = it.hasFocus
val isCaptured= it.isCaptured
}
あなたへのおすすめ
- 注: JavaScript がオフになっている場合はリンクテキストが表示されます
- フォーカス動作を変更する
- Compose のマテリアル デザイン 2
- ユーザー入力を処理する