الفرق بين المراجعتين ل"ReactNative/keyboard"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:Keyboard في React Native}}</noinclude> تُستخدم وحدة <code>Keyboard</code> للتحكّم بأحداث لوحة المفاتيح. _...')
 
ط
 
(7 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:Keyboard في React Native}}</noinclude>
+
<noinclude>{{DISPLAYTITLE:الواجهة Keyboard في React Native}}</noinclude>
تُستخدم وحدة <code>Keyboard</code> للتحكّم بأحداث لوحة المفاتيح.
+
تُستخدم الوحدة <code>Keyboard</code> للتّحكّم بأحداث لوحة المفاتيح.
 
__toc__
 
__toc__
 
== الاستخدام ==
 
== الاستخدام ==
تسمح وحدة Keyboard بالتنصّت (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(() => {
+
 
   Keyboard.addListener("keyboardDidShow", _keyboardDidShow);
+
  useEffect(() => {
   Keyboard.addListener("keyboardDidHide", _keyboardDidHide);
+
    const showSubscription = Keyboard.addListener("keyboardDidShow", () => {
+
      setKeyboardStatus("Keyboard Shown");
   // cleanup function
+
    });
   return () => {
+
    const hideSubscription = Keyboard.addListener("keyboardDidHide", () => {
     Keyboard.removeListener("keyboardDidShow", _keyboardDidShow);
+
      setKeyboardStatus("Keyboard Hidden");
     Keyboard.removeListener("keyboardDidHide", _keyboardDidHide);
+
    });
   };
+
 
 +
    return () => {
 +
      showSubscription.remove();
 +
      hideSubscription.remove();
 +
    };
 
   }, []);
 
   }, []);
+
 
 const _keyboardDidShow = () => {
+
  return (
   alert("Keyboard Shown");
+
    <View style={style.container}>
  };
+
      <TextInput
+
        style={style.input}
 const _keyboardDidHide = () => {
+
        placeholder='Click here…'
   alert("Keyboard Hidden");
+
        onSubmitEditing={Keyboard.dismiss}
  };
+
      />
+
      <Text style={style.status}>{keyboardStatus}</Text>
 return <TextInput style={s.input} placeholder='Click here ...' onSubmitEditing={Keyboard.dismiss} />;
+
    </View>
 +
  );
 
}
 
}
+
 
const s = StyleSheet.create({
+
const style = StyleSheet.create({
  input:{
+
  container: {
   margin:60,
+
    flex: 1,
   padding: 10,
+
    padding: 36
   borderWidth: 0.5,
+
  },
   borderRadius: 4,
+
  input: {
   backgroundColor: "#fff"
+
    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 {
 componentDidMount() {
+
  state = {
   this.keyboardDidShowListener = Keyboard.addListener(
+
    keyboardStatus: undefined
     'keyboardDidShow',
+
  };
     this._keyboardDidShow,
+
 
   );
+
  componentDidMount() {
   this.keyboardDidHideListener = Keyboard.addListener(
+
    this.keyboardDidShowSubscription = Keyboard.addListener(
     'keyboardDidHide',
+
      'keyboardDidShow',
     this._keyboardDidHide,
+
      () => {
   );
+
        this.setState({ keyboardStatus: 'Keyboard Shown' });
 +
      },
 +
    );
 +
    this.keyboardDidHideSubscription = Keyboard.addListener(
 +
      'keyboardDidHide',
 +
      () => {
 +
        this.setState({ keyboardStatus: 'Keyboard Hidden' });
 +
      },
 +
    );
 
   }
 
   }
+
 
 componentWillUnmount() {
+
  componentWillUnmount() {
   this.keyboardDidShowListener.remove();
+
    this.keyboardDidShowSubscription.remove();
   this.keyboardDidHideListener.remove();
+
    this.keyboardDidHideSubscription.remove();
 
   }
 
   }
+
 
 _keyboardDidShow() {
+
  render() {
   alert('Keyboard Shown');
+
    return (
 +
      <View style={style.container}>
 +
        <TextInput
 +
          style={style.input}
 +
          placeholder='Click here…'
 +
          onSubmitEditing={Keyboard.dismiss}
 +
        />
 +
        <Text style={style.status}>
 +
          {this.state.keyboardStatus}
 +
        </Text>
 +
      </View>
 +
    )
 
   }
 
   }
+
}
 _keyboardDidHide() {
+
 
   alert('Keyboard Hidden');
+
const style = StyleSheet.create({
 +
  container: {
 +
    flex: 1,
 +
    padding: 36
 +
  },
 +
  input: {
 +
    padding: 10,
 +
    borderWidth: 0.5,
 +
    borderRadius: 4
 +
  },
 +
  status: {
 +
    padding: 10,
 +
    textAlign: "center"
 
   }
 
   }
+
});
 render() {
+
 
   return <TextInput style={s.input} placeholder='Click here ...' onSubmitEditing={Keyboard.dismiss} />;
 
  }
 
}
 
 
const s = StyleSheet.create({
 
  input:{
 
   margin:60,
 
   padding: 10,
 
   borderWidth: 0.5,
 
   borderRadius: 4,
 
   backgroundColor: "#fff"
 
  }
 
})
 
 
 
export default Example;
 
export default Example;
 
</syntaxhighlight>
 
</syntaxhighlight>
سطر 97: سطر 125:
 
== التوابع ==
 
== التوابع ==
  
=== <code>addListener()</code> ===
+
=== <code>addListener()</code> ===
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
static addListener(eventName, callback)
 
static addListener(eventName, callback)
</syntaxhighlight>يوصل هذا التابع تابع JavaScript بالحدث المعرَّف، بإشعار لوحة المفاتيح الأصيلة، وعندها يعيد هذا التابع مرجعًا إلى المُنصت (listener).  
+
</syntaxhighlight>يوصل هذا التابع تابع <code>JavaScript</code> بالحدث المعرَّف، بإشعار لوحة المفاتيح الأصيلة، وعندها يعيد هذا التابع مرجعًا إلى المُنصت (listener).  
  
==== المعاملات ====
+
المعاملات:
 
{| class="wikitable"
 
{| class="wikitable"
 
!الاسم
 
!الاسم
سطر 112: سطر 140:
 
|سلسلة نصية (string)
 
|سلسلة نصية (string)
 
|نعم
 
|نعم
|<code>nativeEvent</code>هي سلسلة نصية تعرّف الحدث الذي تنصت له
+
|هي سلسلة نصية تعرّف الحدث الذي تنصت له، انظر الشرح في الأسفل
 
|-
 
|-
 
|<code>callback</code>
 
|<code>callback</code>
 
|دالة (function)
 
|دالة (function)
 
|نعم
 
|نعم
|الدالة التي سيتم استدعائها عند إطلاق الحدث
+
|الدّالة التّي سيتم استدعاؤها عند إطلاق الحدث
 
|}
 
|}
 
+
يمكن أن يكون <code>eventName</code> أحد الأحداث التالية:
==== الحدث الأصيل (nativeEvent) ====
 
يمكن أن يكون أحد الأحداث التالية:
 
 
 
 
* <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"
 
!الاسم
 
!الاسم
سطر 147: سطر 169:
 
|سلسلة نصية (string)
 
|سلسلة نصية (string)
 
|نعم
 
|نعم
|<code>nativeEvent</code>هي سلسلة نصية تعرّف الحدث الذي تنصت له
+
|هي سلسلة نصّية تعرّف الحدث الذي تنصت له
 
|-
 
|-
 
|<code>callback</code>
 
|<code>callback</code>
 
|دالة (function)
 
|دالة (function)
 
|نعم
 
|نعم
|الدالة التي سيتم استدعائها عند إطلاق الحدث
+
|الدّالة التي سيتم استدعاؤها عند إطلاق الحدث
 
|}
 
|}
  
=== <code>removeAllListeners()</code> ===
+
=== <code>‎removeAllListeners()</code> ===
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
static removeAllListeners(eventName)
 
static removeAllListeners(eventName)
 
</syntaxhighlight>يزيل هذا التابع جميع المُنصتات الخاصة بنوع حدثٍ معيّنٍ.  
 
</syntaxhighlight>يزيل هذا التابع جميع المُنصتات الخاصة بنوع حدثٍ معيّنٍ.  
  
==== المعاملات ====
+
المعاملات:
 
{| class="wikitable"
 
{| class="wikitable"
 
!الاسم
 
!الاسم
سطر 170: سطر 192:
 
|سلسلة نصية (string)
 
|سلسلة نصية (string)
 
|نعم
 
|نعم
|سلسلة نصية لمنصتات الأحداث الأصيلة التي سيتم إزالتها
+
|سلسلة نصية لمنصتات الأحداث الأصيلة التي ستتم إزالتها
 
|}
 
|}
  
=== <code>dismiss()</code> ===
+
=== <code>dismiss()</code> ===
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
static dismiss()
 
static dismiss()
</syntaxhighlight>يلغي التابع <code>dismiss()</code> لوحة المفاتيح الفعّالة، ويزيل التركيز.  
+
</syntaxhighlight>يلغي التابع <code>()dismiss</code> لوحة المفاتيح الفعّالة، ويزيل التركيز.
  
=== <code>scheduleLayoutAnimation()</code> ===
+
=== <code>‎scheduleLayoutAnimation()</code> ===
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
static scheduleLayoutAnimation(event)
 
static scheduleLayoutAnimation(event)
</syntaxhighlight>يعتبر هذا التابع مفيدًا لمزامنة حجم TextInput (أو أيّ ملحقٍ من ملحقات إظهار لوحة المفاتيح الأخرى)، وتغيرات موقعه مع تحركات لوحة المفاتيح.  
+
</syntaxhighlight>يعتبر هذا التابع مفيدًا لمزامنة حجم <code>[[ReactNative/textinput|TextInput]]</code> (أو أيّ ملحقٍ من ملحقات إظهار لوحة المفاتيح الأخرى)، وتغيرات موقعه مع تحركات لوحة المفاتيح.
  
 
== مصادر ==
 
== مصادر ==
سطر 187: سطر 209:
 
* [https://facebook.github.io/react-native/docs/keyboard صفحة Keyboard في توثيق React Native الرسميّ]
 
* [https://facebook.github.io/react-native/docs/keyboard صفحة Keyboard في توثيق React Native الرسميّ]
 
[[تصنيف:ReactNative]]
 
[[تصنيف:ReactNative]]
 +
[[تصنيف:React Native API]]

المراجعة الحالية بتاريخ 14:13، 9 أكتوبر 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 (أو أيّ ملحقٍ من ملحقات إظهار لوحة المفاتيح الأخرى)، وتغيرات موقعه مع تحركات لوحة المفاتيح.

مصادر