الفرق بين المراجعتين لصفحة: «ReactNative/keyboard»
رقية-بورية (نقاش | مساهمات) |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:Keyboard في React Native}}</noinclude> | <noinclude>{{DISPLAYTITLE:الواجهة Keyboard في React Native}}</noinclude> | ||
تُستخدم | تُستخدم الوحدة <code>Keyboard</code> للتّحكّم بأحداث لوحة المفاتيح. | ||
__toc__ | __toc__ | ||
== الاستخدام == | == الاستخدام == | ||
تسمح وحدة <code>Keyboard</code> بالتّنصّت (listen) للأحداث الأصيّلة (native) والاستجابة لها، بالإضافة لإجراء تغييرات في لوحة المفاتيح كإلغائها. | تسمح وحدة <code>Keyboard</code> بالتّنصّت (listen) للأحداث الأصيّلة (native) والاستجابة لها، بالإضافة لإجراء تغييرات في لوحة المفاتيح كإلغائها. | ||
* مثال لمكوِّن دالّة (Function Component) | * [https://snack.expo.dev/@hsoubwiki/keyboard-function-component-example مثال لمكوِّن دالّة (Function Component)] | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
import React, { useEffect } from "react"; | import React, { useState, useEffect } from "react"; | ||
import { Keyboard, TextInput, StyleSheet } from "react-native"; | import { Keyboard, Text, TextInput, StyleSheet, View } from "react-native"; | ||
const Example = () => { | const Example = () => { | ||
const [keyboardStatus, setKeyboardStatus] = useState(undefined); | |||
useEffect(() => { | |||
const showSubscription = Keyboard.addListener("keyboardDidShow", () => { | |||
setKeyboardStatus("Keyboard Shown"); | |||
}); | |||
const hideSubscription = Keyboard.addListener("keyboardDidHide", () => { | |||
setKeyboardStatus("Keyboard Hidden"); | |||
}); | |||
return () => { | |||
showSubscription.remove(); | |||
hideSubscription.remove(); | |||
}; | |||
}, []); | }, []); | ||
return ( | |||
<View style={style.container}> | |||
<TextInput | |||
style={style.input} | |||
placeholder='Click here…' | |||
onSubmitEditing={Keyboard.dismiss} | |||
/> | |||
<Text style={style.status}>{keyboardStatus}</Text> | |||
</View> | |||
); | |||
} | } | ||
const | const style = StyleSheet.create({ | ||
container: { | |||
flex: 1, | |||
padding: 36 | |||
}, | |||
input: { | |||
padding: 10, | |||
borderWidth: 0.5, | |||
}) | borderRadius: 4 | ||
}, | |||
status: { | |||
padding: 10, | |||
textAlign: "center" | |||
} | |||
}); | |||
export default Example; | export default Example; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
* مثال لمكوِّن صنف (Class Component) | * [https://snack.expo.dev/@hsoubwiki/keyboard-class-component-example مثال لمكوِّن صنف (Class Component)] | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
import React, {Component} from 'react'; | import React, { Component } from 'react'; | ||
import {Keyboard, TextInput , StyleSheet} from 'react-native'; | import { Keyboard, Text, TextInput, StyleSheet, View } from 'react-native'; | ||
class Example extends Component { | class Example extends Component { | ||
state = { | |||
keyboardStatus: undefined | |||
}; | |||
componentDidMount() { | |||
this.keyboardDidShowSubscription = Keyboard.addListener( | |||
'keyboardDidShow', | |||
() => { | |||
this.setState({ keyboardStatus: 'Keyboard Shown' }); | |||
}, | |||
); | |||
this.keyboardDidHideSubscription = Keyboard.addListener( | |||
'keyboardDidHide', | |||
() => { | |||
this.setState({ keyboardStatus: 'Keyboard Hidden' }); | |||
}, | |||
); | |||
} | } | ||
componentWillUnmount() { | |||
this.keyboardDidShowSubscription.remove(); | |||
this.keyboardDidHideSubscription.remove(); | |||
} | } | ||
render() { | |||
return ( | |||
<View style={style.container}> | |||
<TextInput | |||
style={style.input} | |||
placeholder='Click here…' | |||
onSubmitEditing={Keyboard.dismiss} | |||
/> | |||
<Text style={style.status}> | |||
{this.state.keyboardStatus} | |||
</Text> | |||
</View> | |||
) | |||
} | } | ||
} | |||
const style = StyleSheet.create({ | |||
container: { | |||
flex: 1, | |||
padding: 36 | |||
}, | |||
input: { | |||
padding: 10, | |||
borderWidth: 0.5, | |||
borderRadius: 4 | |||
}, | |||
status: { | |||
padding: 10, | |||
textAlign: "center" | |||
} | } | ||
}); | |||
export default Example; | export default Example; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
سطر 102: | سطر 130: | ||
</syntaxhighlight>يوصل هذا التابع تابع <code>JavaScript</code> بالحدث المعرَّف، بإشعار لوحة المفاتيح الأصيلة، وعندها يعيد هذا التابع مرجعًا إلى المُنصت (listener). | </syntaxhighlight>يوصل هذا التابع تابع <code>JavaScript</code> بالحدث المعرَّف، بإشعار لوحة المفاتيح الأصيلة، وعندها يعيد هذا التابع مرجعًا إلى المُنصت (listener). | ||
المعاملات: | |||
{| class="wikitable" | {| class="wikitable" | ||
!الاسم | !الاسم | ||
سطر 112: | سطر 140: | ||
|سلسلة نصية (string) | |سلسلة نصية (string) | ||
|نعم | |نعم | ||
| | |هي سلسلة نصية تعرّف الحدث الذي تنصت له، انظر الشرح في الأسفل | ||
|- | |- | ||
|<code>callback</code> | |<code>callback</code> | ||
سطر 119: | سطر 147: | ||
|الدّالة التّي سيتم استدعاؤها عند إطلاق الحدث | |الدّالة التّي سيتم استدعاؤها عند إطلاق الحدث | ||
|} | |} | ||
يمكن أن يكون <code>eventName</code> أحد الأحداث التالية: | |||
يمكن أن يكون أحد الأحداث التالية: | |||
* <code>keyboardWillShow</code> | * <code>keyboardWillShow</code> | ||
* <code>keyboardDidShow</code> | * <code>keyboardDidShow</code> | ||
سطر 129: | سطر 154: | ||
* <code>keyboardWillChangeFrame</code> | * <code>keyboardWillChangeFrame</code> | ||
* <code>keyboardDidChangeFrame</code> | * <code>keyboardDidChangeFrame</code> | ||
'''ملاحظة:''' إذا وضعت <code>android:windowSoftInputMode</code> مساويةً للقيمة <code>adjustResize</code>، أو <code>adjustPan</code>، فإن الحدثين <code>keyboardDidShow</code>، و<code>keyboardDidHide</code> سيتوفران فقط على منصّة Android؛ أمّا إذا وضعت <code>android:windowSoftInputMode</code> مساويةً للقيمة <code>adjustNothing</code>، فلن يتوفر أي حدثٍ على منصة Android، وعادة لا يتوفر الحدثان <code>keyboardWillShow</code>، و<code>keyboardWillHide</code> على منصة Android بسبب عدم وجود أحداثٍ أصيلةٍ موافقةٍ لهما. | '''ملاحظة:''' إذا وضعت <code>android:windowSoftInputMode</code> مساويةً للقيمة <code>adjustResize</code>، أو <code>adjustPan</code>، فإن الحدثين <code>keyboardDidShow</code>، و <code>keyboardDidHide</code> سيتوفران فقط على منصّة Android؛ أمّا إذا وضعت <code>android:windowSoftInputMode</code> مساويةً للقيمة <code>adjustNothing</code>، فلن يتوفر أي حدثٍ على منصة Android، وعادة لا يتوفر الحدثان <code>keyboardWillShow</code>، و<code>keyboardWillHide</code> على منصة Android بسبب عدم وجود أحداثٍ أصيلةٍ موافقةٍ لهما. | ||
=== <code>removeListener()</code> === | === <code>removeListener()</code> === | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
static removeListener(eventName, callback) | static removeListener(eventName, callback) | ||
</syntaxhighlight>يزيل مُنصتًا معيّنًا. | </syntaxhighlight>يزيل مُنصتًا معيّنًا. <blockquote>'''تنبيه''': هذا التابع مهمل، استعمل التابع <code>remove()</code> مع اشتراك الحدث الذي يعيده التابع <code>addListener()</code>. </blockquote>المعاملات: | ||
{| class="wikitable" | {| class="wikitable" | ||
!الاسم | !الاسم | ||
سطر 146: | سطر 169: | ||
|سلسلة نصية (string) | |سلسلة نصية (string) | ||
|نعم | |نعم | ||
| | |هي سلسلة نصّية تعرّف الحدث الذي تنصت له | ||
|- | |- | ||
|<code>callback</code> | |<code>callback</code> | ||
سطر 159: | سطر 182: | ||
</syntaxhighlight>يزيل هذا التابع جميع المُنصتات الخاصة بنوع حدثٍ معيّنٍ. | </syntaxhighlight>يزيل هذا التابع جميع المُنصتات الخاصة بنوع حدثٍ معيّنٍ. | ||
المعاملات: | |||
{| class="wikitable" | {| class="wikitable" | ||
!الاسم | !الاسم | ||
سطر 180: | سطر 203: | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
static scheduleLayoutAnimation(event) | static scheduleLayoutAnimation(event) | ||
</syntaxhighlight>يعتبر هذا التابع مفيدًا لمزامنة حجم TextInput (أو أيّ ملحقٍ من ملحقات إظهار لوحة المفاتيح الأخرى)، وتغيرات موقعه مع تحركات لوحة المفاتيح. | </syntaxhighlight>يعتبر هذا التابع مفيدًا لمزامنة حجم <code>[[ReactNative/textinput|TextInput]]</code> (أو أيّ ملحقٍ من ملحقات إظهار لوحة المفاتيح الأخرى)، وتغيرات موقعه مع تحركات لوحة المفاتيح. | ||
== مصادر == | == مصادر == |
مراجعة 18:50، 4 أكتوبر 2021
تُستخدم الوحدة Keyboard
للتّحكّم بأحداث لوحة المفاتيح.
الاستخدام
تسمح وحدة Keyboard
بالتّنصّت (listen) للأحداث الأصيّلة (native) والاستجابة لها، بالإضافة لإجراء تغييرات في لوحة المفاتيح كإلغائها.
import React, { useState, useEffect } from "react";
import { Keyboard, Text, TextInput, StyleSheet, View } from "react-native";
const Example = () => {
const [keyboardStatus, setKeyboardStatus] = useState(undefined);
useEffect(() => {
const showSubscription = Keyboard.addListener("keyboardDidShow", () => {
setKeyboardStatus("Keyboard Shown");
});
const hideSubscription = Keyboard.addListener("keyboardDidHide", () => {
setKeyboardStatus("Keyboard Hidden");
});
return () => {
showSubscription.remove();
hideSubscription.remove();
};
}, []);
return (
<View style={style.container}>
<TextInput
style={style.input}
placeholder='Click here…'
onSubmitEditing={Keyboard.dismiss}
/>
<Text style={style.status}>{keyboardStatus}</Text>
</View>
);
}
const style = StyleSheet.create({
container: {
flex: 1,
padding: 36
},
input: {
padding: 10,
borderWidth: 0.5,
borderRadius: 4
},
status: {
padding: 10,
textAlign: "center"
}
});
export default Example;
import React, { Component } from 'react';
import { Keyboard, Text, TextInput, StyleSheet, View } from 'react-native';
class Example extends Component {
state = {
keyboardStatus: undefined
};
componentDidMount() {
this.keyboardDidShowSubscription = Keyboard.addListener(
'keyboardDidShow',
() => {
this.setState({ keyboardStatus: 'Keyboard Shown' });
},
);
this.keyboardDidHideSubscription = Keyboard.addListener(
'keyboardDidHide',
() => {
this.setState({ keyboardStatus: 'Keyboard Hidden' });
},
);
}
componentWillUnmount() {
this.keyboardDidShowSubscription.remove();
this.keyboardDidHideSubscription.remove();
}
render() {
return (
<View style={style.container}>
<TextInput
style={style.input}
placeholder='Click here…'
onSubmitEditing={Keyboard.dismiss}
/>
<Text style={style.status}>
{this.state.keyboardStatus}
</Text>
</View>
)
}
}
const style = StyleSheet.create({
container: {
flex: 1,
padding: 36
},
input: {
padding: 10,
borderWidth: 0.5,
borderRadius: 4
},
status: {
padding: 10,
textAlign: "center"
}
});
export default Example;
التوابع
addListener()
static addListener(eventName, callback)
يوصل هذا التابع تابع JavaScript
بالحدث المعرَّف، بإشعار لوحة المفاتيح الأصيلة، وعندها يعيد هذا التابع مرجعًا إلى المُنصت (listener).
المعاملات:
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
eventName
|
سلسلة نصية (string) | نعم | هي سلسلة نصية تعرّف الحدث الذي تنصت له، انظر الشرح في الأسفل |
callback
|
دالة (function) | نعم | الدّالة التّي سيتم استدعاؤها عند إطلاق الحدث |
يمكن أن يكون eventName
أحد الأحداث التالية:
keyboardWillShow
keyboardDidShow
keyboardWillHide
keyboardDidHide
keyboardWillChangeFrame
keyboardDidChangeFrame
ملاحظة: إذا وضعت android:windowSoftInputMode
مساويةً للقيمة adjustResize
، أو adjustPan
، فإن الحدثين keyboardDidShow
، و keyboardDidHide
سيتوفران فقط على منصّة Android؛ أمّا إذا وضعت android:windowSoftInputMode
مساويةً للقيمة adjustNothing
، فلن يتوفر أي حدثٍ على منصة Android، وعادة لا يتوفر الحدثان keyboardWillShow
، وkeyboardWillHide
على منصة Android بسبب عدم وجود أحداثٍ أصيلةٍ موافقةٍ لهما.
removeListener()
static removeListener(eventName, callback)
يزيل مُنصتًا معيّنًا.
تنبيه: هذا التابع مهمل، استعمل التابع
remove()
مع اشتراك الحدث الذي يعيده التابعaddListener()
.
المعاملات:
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
eventName
|
سلسلة نصية (string) | نعم | هي سلسلة نصّية تعرّف الحدث الذي تنصت له |
callback
|
دالة (function) | نعم | الدّالة التي سيتم استدعاؤها عند إطلاق الحدث |
removeAllListeners()
static removeAllListeners(eventName)
يزيل هذا التابع جميع المُنصتات الخاصة بنوع حدثٍ معيّنٍ.
المعاملات:
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
eventType
|
سلسلة نصية (string) | نعم | سلسلة نصية لمنصتات الأحداث الأصيلة التي ستتم إزالتها |
dismiss()
static dismiss()
يلغي التابع ()dismiss
لوحة المفاتيح الفعّالة، ويزيل التركيز.
scheduleLayoutAnimation()
static scheduleLayoutAnimation(event)
يعتبر هذا التابع مفيدًا لمزامنة حجم TextInput
(أو أيّ ملحقٍ من ملحقات إظهار لوحة المفاتيح الأخرى)، وتغيرات موقعه مع تحركات لوحة المفاتيح.