React Native でスムーズなキーボード認識サインイン画面を構築する
React Native で適切に最適化されたサインイン画面を作成するには、多くの場合、入力フィールドがキーボードで隠されないようにキーボード操作を処理する必要があります。このガイドでは、カスタム フックを利用してキーボード オフセットの高さを管理し、アニメーション調整を備えたキーボード対応のサインイン画面を構築する手順を説明します。また、ヘッダー画像を追加し、見た目が美しく機能的なレイアウトになるように画面を整理します。
この実装の特徴:
- キーボード認識: キーボードの高さに基づいて、画面の位置が調整されます。
- スムーズ アニメーション: キーボードが表示または非表示になるときにアニメーションで遷移します。
- 再利用可能なカスタム フック: キーボードの高さを動的に管理するための useKeyboardOffsetHeight フック。
1. カスタムフック: useKeyboardOffsetHeight
カスタム フック useKeyboardOffsetHeight は、キーボードの表示/非表示イベントをリッスンし、レイアウト調整をアニメーション化するために重要なキーボードの高さを返します。このフックにより、機能が iOS と Android の両方で確実に動作するようになります。
import { useEffect, useState } from 'react'; import { Keyboard } from 'react-native'; export default function useKeyboardOffsetHeight() { const [keyboardOffsetHeight, setKeyboardOffsetHeight] = useState(0); useEffect(() => { const showListener = Keyboard.addListener('keyboardWillShow', (e) => { setKeyboardOffsetHeight(e.endCoordinates.height); }); const hideListener = Keyboard.addListener('keyboardWillHide', () => { setKeyboardOffsetHeight(0); }); const androidShowListener = Keyboard.addListener('keyboardDidShow', (e) => { setKeyboardOffsetHeight(e.endCoordinates.height); }); const androidHideListener = Keyboard.addListener('keyboardDidHide', () => { setKeyboardOffsetHeight(0); }); return () => { showListener.remove(); hideListener.remove(); androidShowListener.remove(); androidHideListener.remove(); }; }, []); return keyboardOffsetHeight; }
2. 主要コンポーネント: アプリ
メイン コンポーネントは、カスタム useKeyboardOffsetHeight フックとアニメーション API を使用して、サインイン フォームのスムーズな移行を管理します。フォームには、電子メールとパスワードのフィールド、サインイン ボタン、ヘッダー画像が含まれています。
import React, { useEffect, useRef, useState } from 'react'; import { Animated, Image, StyleSheet, Text, TextInput, TouchableOpacity, View } from 'react-native'; import useKeyboardOffsetHeight from './useKeyboardOffsetHeight'; const App = () => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const keyboardOffsetHeight = useKeyboardOffsetHeight(); const animatedValue = useRef(new Animated.Value(0)).current; const handleSignIn = () => { // Handle sign-in logic here console.log('Email:', email); console.log('Password:', password); }; // Animate view based on keyboard height useEffect(() => { Animated.timing(animatedValue, { toValue: keyboardOffsetHeight ? -keyboardOffsetHeight * 0.5 : 0, // adjust "0.5" as per requirement to adjust scroll position duration: 500, useNativeDriver: true, }).start(); }, [keyboardOffsetHeight]); return ( <View style={styles.container}> <View style={{ flex: 1 }}> <Image source={{ uri: 'https://cdn.shopaccino.com/igmguru/articles/Become-React-Native-Developer.png?v=496', }} style={styles.image} resizeMode="cover" /> </View> <Animated.ScrollView bounces={false} keyboardShouldPersistTaps="handled" keyboardDismissMode="on-drag" style={{ transform: [{ translateY: animatedValue }] }} contentContainerStyle={styles.box} > <Text style={styles.title}>Sign In</Text> <TextInput style={styles.input} placeholder="Email" value={email} onChangeText={setEmail} keyboardType="email-address" autoCapitalize="none" /> <TextInput style={styles.input} placeholder="Password" value={password} onChangeText={setPassword} secureTextEntry /> </Animated.ScrollView> <TouchableOpacity style={styles.signInButton} onPress={handleSignIn}> <Text style={styles.buttonText}>Sign In</Text> </TouchableOpacity> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, padding: 20, backgroundColor: '#f9f9f9', }, image: { flex: 1, borderRadius: 10, }, box: { flex: 1, width: '100%', backgroundColor: 'lightblue', padding: 20, borderRadius: 10, }, title: { fontSize: 24, fontWeight: 'bold', textAlign: 'center', marginBottom: 20, }, input: { height: 50, borderColor: '#ddd', borderWidth: 1, borderRadius: 8, paddingHorizontal: 10, marginBottom: 15, fontSize: 16, backgroundColor: '#f9f9f9', }, signInButton: { width: '100%', marginTop: 20, backgroundColor: '#4a90e2', borderRadius: 8, paddingVertical: 15, alignItems: 'center', marginBottom: 40, }, buttonText: { color: '#fff', fontSize: 18, fontWeight: 'bold', }, }); export default App;
まとめ
このキーボード対応のサインイン画面は、次のようなスムーズでユーザーフレンドリーなエクスペリエンスを提供します。
- カスタム フックを使用して、キーボード オフセットの高さを動的に管理します。
- アニメーションを適用して、キーボードがアクティブなときにフォームを表示し続けます。
- 画像ヘッダー、適切なスタイルの入力フィールド、目立つサインイン ボタンを使用して、視覚的に魅力的なレイアウトを構築。
このアプローチを使用すると、特に画面スペースとキーボードとのユーザー操作が重要な考慮事項となるモバイル デバイス上で、洗練された機能的なテキスト入力 UI を作成できます。この設定は、より多くのフォーム フィールドや機能で拡張でき、React Native 認証フローの優れた基盤となります。
以上がReact Native でスムーズなキーボード認識サインイン画面を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









