回答:
TouchableOpacity
エクステントなTouchableWithoutFeedback
ので、disabled
プロパティを使用することができます:
<TouchableOpacity disabled={true}>
<Text>I'm disabled</Text>
</TouchableOpacity>
disabled
状態は子のレンダリングスタイルを変更しないことに注意してください。無効な状態をユーザーに表示するには、Text
要素にスタイルを適用する必要があります。たとえば<Text style={{ opacity: 0.5 }}>I'm disabled</Text>
、FYI
これをしてください
<TouchableOpacity activeOpacity={disabled ? 1 : 0.7} onPress={!disabled && onPress}>
<View>
<Text>{text}</Text>
</View>
</TouchableOpacity>
<Text>{text}</FontText>
?FontText?
これは、高次コンポーネントを使用して解決できるようなもののようです。私はそれを自分で100%理解するのに苦労しているので間違っているかもしれませんが、多分それはあなたに役立つでしょう(ここにいくつかのリンクがあります)...
TouchableOpacityが受け取りactiveOpacity
ます。あなたはこのようなことをすることができます
<TouchableOpacity activeOpacity={enabled ? 0.5 : 1}>
</TouchableOpacity>
したがって、有効になっている場合は正常に見え、そうでない場合はtouchablewithoutfeedbackと同じように見えます。
このネイティブベースのソリューションがあります:
<Button
block
disabled={!learnedWordsByUser.length}
style={{ marginTop: 10 }}
onPress={learnedWordsByUser.length && () => {
onFlipCardsGenerateNewWords(learnedWordsByUser)
onFlipCardsBtnPress()
}}
>
<Text>Let's Review</Text>
</Button>
テキストを無効にするには、次のようなテキストスタイルでopacity:0を設定する必要があります。
<TouchableOpacity style={{opacity:0}}>
<Text>I'm disabled</Text>
</TouchableOpacity>
CustButtonをTouchableWithoutFeedback
で作成し、必要な効果とロジックをonPressIn
、onPressout
または他の小道具で設定できます。
これを修正するには、styleプロパティに条件を指定します。
const startQuizDisabled = () => props.deck.cards.length === 0;
<TouchableOpacity
style={startQuizDisabled() ? styles.androidStartQuizDisable : styles.androidStartQuiz}
onPress={startQuiz}
disabled={startQuizDisabled()}
>
<Text
style={styles.androidStartQuizBtn}
>Start Quiz</Text>
</TouchableOpacity>
const styles = StyleSheet.create({
androidStartQuiz: {
marginTop:25,
backgroundColor: "green",
padding: 10,
borderRadius: 5,
borderWidth: 1
},
androidStartQuizDisable: {
marginTop:25,
backgroundColor: "green",
padding: 10,
borderRadius: 5,
borderWidth: 1,
opacity: 0.4
},
androidStartQuizBtn: {
color: "white",
fontSize: 24
}
})
これの私の回避策は次のとおりです。
<TouchableOpacity
onPress={() => {
this.onSubmit()
}}
disabled={this.state.validity}
style={this.state.validity ?
SignUpStyleSheet.inputStyle :
[SignUpStyleSheet.inputAndButton, {opacity: 0.5}]}>
<Text style={SignUpStyleSheet.buttonsText}>Sign-Up</Text>
</TouchableOpacity>
SignUpStyleSheet.inputStyle
ボタンのスタイルを保持しているときに無効になっているかいないし、中にstyle={this.state.validity ? SignUpStyleSheet.inputStyle : [SignUpStyleSheet.inputAndButton, {opacity: 0.5}]}
ボタンが無効になっている場合、私は不透明度プロパティを追加します。
ボタンを有効または無効にしたり、条件を使用したり、デフォルトで直接無効にしたりできます:true
// in calling function of button
handledisableenable()
{
// set the state for disabling or enabling the button
if(ifSomeConditionReturnsTrue)
{
this.setState({ Isbuttonenable : true })
}
else
{
this.setState({ Isbuttonenable : false})
}
}
<TouchableOpacity onPress ={this.handledisableenable} disabled=
{this.state.Isbuttonenable}>
<Text> Button </Text>
</TouchableOpacity>
最も効率的な方法は、touchableOpacityをビューでラップし、スタイル条件でprop pointerEventsを追加することだと思います。
<View style={this.state.disabled && commonStyles.buttonDisabled}
pointerEvents={this.state.disabled ? "none" : "auto"}>
<TouchableOpacity
style={styles.connectButton}>
<Text style={styles.connectButtonText}">CONNECT </Text>
</TouchableOpacity>
</View>
CSS:
buttonDisabled: {
opacity: 0.7
}