مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

معرفی Event ها در برنامه نویسی اندروید و انواع آن ها به همراه مثال


 رویداد ها (Events) در اندروید یک راه مفید برای جمع آوری داده ها از تعاملات کاربر (interface) ، با اجزای مختلف اپلیکیشن است. مانند زمانی که کاربر صفحه را لمس یا روی یک دکمه کلیک می کند. اندروید رویداد های اتفاق افتاده را در یک فریم ورک ، که دارای ساختار اولین ورودی اولین خروجی (FIFO) ، می باشد، ذخیره می کند و شما می توانید برای هر رویداد، کد نویسی هایی را در تابع مربوط به آن انجام دهید.

 

سه مفهوم مربوط به مدیریت رویداد ها در اندروید وجود دارد:

  • Event Listener : شنونده ی رویداد (Event) ، یک رابط در کلاس view است که در پاسخ به وقوع یک رویداد (Event) ، یک متد را فراخوانی می کند. به عبارت دیگر یک متدِ شنونده ی رویداد ، زمانی فراخوانی می شود که کاربر ، رویدادی (مثل کلیک کردن) ، که برای شنونده ی رویداد تعریف شده است را انجام دهد.
  • Event Listener Registration : فرآیندی است که طی آن یک متد برای اداره ی رویداد (Event) تعریف می شود؛ به این معنا که هر گاه شنونده، رویداد مورد نظر را شناسایی کرد این متد را فراخوانی می کند.
  • Event Handler : وقتی یک رویداد که برایش شنونده تعریف شده است اتفاق می افتد شنونده ی رویداد (Event Listener) ، گرداننده ی رویداد (Event Handler) را که یک متد برای مدیریت رویداد می باشد را فراخوانی می کند.

 

Event Listeners و Event Handlers:

()OnClickListener : این متد زمانی رخ می دهد که کاربر روی هر ویجتی نظیر دکمه، متن، تصویر و غیره کلیک کند یا لمس کند . این رویداد با گرداننده ی رویداد ()onClick مدیریت می شود.

()OnLongClickListener : این متد زمانی فراخوانی می شود که کاربر برای یک ثانیه یا بیشتر یک ویجت مانند دکمه، برچسب متنی، عکس و مانند این ها را لمس نماید. این رویداد با گرداننده ی رویداد ()onLongClick  مدیریت می شود.

()OnFocusChangeListener : این متد زمانی فراخوانی می شود که ویجت فوکوس را از دست بدهد و یا کاربر آن را ترک کند. این رویداد با گرداننده ی رویداد ()onFocusChange مدیریت می شود.

()OnKeyListener : این متد زمانی فراخوانی می شود که کاربر یک کلید سخت افزاری از دستگاه را فشار دهد یا رها کند. این رویداد با گرداننده ی رویداد ()onKey مدیریت می شود.

()OnTouchListener : این متد هنگامی که کاربر روی دکمه ای کلیک کند یا صفحه را لمس کند فراخوانی می شود. این رویداد با گرداننده ی رویداد ()onTouch مدیریت می شود.

()OnMenuItemClickListener : این متد زمانی که کاربر یک آیتم را از منو انتخاب کند فراخوانی می شود. این رویداد با گرداننده ی رویداد ()onMenuItemClick مدیریت می شود.

کلاس view شنونده های خیلی بیشتری نسبت به آنچه در جدول بالا آورده شده است را ارائه می دهد. بنابراین چنان چه قصد ساختن یک اپلیکیشن پیچده را دارید، توصیه می کنم برای دیدن لیست کامل شنونده های رویدادها (Event Listener) به سایت رسمی اندروید مراجعه کنید.

Event Listeners Registration :

Event Registration ( ثبت رویداد) فرآیندی است که طی آن یک متد برای کنترل رویداد ها در اندروید تعریف می شود؛ به این معنا که هر گاه رویداد مورد نظر ، توسط شنونده شناسایی شود این متد فراخوانی می گردد. اگرچه به روش های مختلفی می توان ابن فرآیند را انجام داد ، با این وجود در زیر ۳ روش را که از بقیه بهتر عمل کرده اند را آورده ایم و شما بسته به نیازتان می توانید از هر روشی که مناسب تر بود بهره ببرید.

  • استفاده از توابع داخلی کلاس.
  • ثبت شنونده با استفاده از تعریف واسط شنونده در داخل کلاس اکتیویتی.
  • استفاده مستقیم از فایل Layout file activity_main.xml .

 

در بخش زیر سه روش به همراه مثال توضیح داده شده.

حالت لمس صفحه

کاربر با استفاده از کلید های سخت افزاری دستگاه یا لمس صفحه ی نمایش می تواند با دستگاه ارتباط برقرار کند. لمس کردن صفحه ی نمایش باعث می شود حالت لمس صفحه فعال شود و کاربر بتواند از طریق لمس کردن کنترل ها (مثل دکمه ها) با برنامه ها تعامل داشته باشد. با این حال می توانیم وضعیت فعال بودن لمس صفحه را با فراخوانی متد ()isInTouchMode از کلاس View بررسی کنیم.

فوکوس

معمولا هنگامی که یک view یا ویجت ، فوکوس را در اختیار می گیرد، یک مکان نمای چشمک زن و یا حاشیه ای درخشان در آن ایجاد می شود که نشان می دهد کامپوننت آماده ی دریافت ورودی از کاربر است.

  • ()isfocusable : مقدار true یا false را بر می گرداند.

  • ()isFocusableInTouchMode : بررسی می کند که آیا view در حالت لمس قابلیت فوکوس پذیری دارد یا نه. (ممکن است برخی از view ها تنها هنگام استفاده از کلید های سخت افزاری قابلیت فوکوس پذیری داشته باشند)
android:foucsUp="@=id/button_l"

onTouchEvent :

public boolean onTouchEvent(motionEvent event){
   switch(event.getAction()){
      case TOUCH_DOWN:
      Toast.makeText(this,"you have clicked down Touch button",Toast.LENTH_LONG).show();
      break();
   
      case TOUCH_UP:
      Toast.makeText(this,"you have clicked up touch button",Toast.LENTH_LONG).show();
      break;
   
      case TOUCH_MOVE:
      Toast.makeText(this,"you have clicked move touch button"Toast.LENTH_LONG).show();
      break;
   }
   return super.onTouchEvent(event) ;
}

 

مثال های Event Handling :

 

Event Listeners Registration با استفاده از توابع داخلی کلاس :

در این روش از متد های کلاس listener برای پیاده سازی شنونده (listener) استفاده می شود. استفاده از این روش زمانی مفید است که هر کلاس فقط به یک کنترل مخصوص اعمال شده باشد و همچنین در این حالت می توانیم آرگومان هایی را به event handler  ارسال کنیم. زیرا در این روش می توانیم بدون فراخوانی کردن ارجاع دهنده های اکتیویتی، به متغییر های اختصاصی (private)  تعریف شده در اکتیویتی دسترسی داشته باشیم.

اما اگر بخواهیم یک handler را به بیش از یک control اعمال کنیم ، باید مجموعه ای از کدهای تکراری را برای هر گرداننده بنویسیم و چنانچه حجم کدها زیاد باشد، حفظ و رسیدگی به آن ها تبدیل به یک کار دشوار خواهد شد.

این مثال در چند مرحله ی ساده نشان می دهد که چگونه یک handler را برای رویداد کلیک (click event) ، با استفاده از توابع داخلی ثبت کنیم.

1) با استفاده از Android Studio IDE یک برنامه اندروید ایجاد کنید و به عنوانMy Application  تحت بسته  com.example.myapplication نامگذاری کنید. نحوه ی ایجاد پروژه ی جدید در بخش آموزشی مثال !Hello World توضیح داده شده است.

2) فایل src/MainActivity.java را برای افزودن دو دکمه listeners و handleers تغییر دهید.

3) محتوای پیش فرض res/layout/activity_main.xml را تغییر دهید تا کنترل های رابط کاربری را شامل شود.

4) نیاز به تعریف ثابت های رشته پیش فرض نیست.

5) اپلیکیشن را با شبیه ساز اندروید اجرا کنید و نتیجه را مورد بررسی قرار دهید.

 

در زیر محتوای تغییر یافته ی فایل src/com.example.My Application/MainActivity.java قرار دارد:

package com.example.myapplication;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {
   private ProgressDialog progress;
   Button b1,b2;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      progress = new ProgressDialog(this);

      b1=(Button)findViewById(R.id.button);
      b2=(Button)findViewById(R.id.button2);
      b1.setOnClickListener(new View.OnClickListener() {
         
         @Override
         public void onClick(View v) {
            TextView txtView = (TextView) findViewById(R.id.textView);
            txtView.setTextSize(25);
         }
      });

      b2.setOnClickListener(new View.OnClickListener() {
         
         @Override
         public void onClick(View v) {
            TextView txtView = (TextView) findViewById(R.id.textView);
            txtView.setTextSize(55);
         }
      });
   }
}

 

محتوای  res/layout/activity_main.xml file  :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity">
   
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Event Handling "
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp"/>
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="clicksite "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_above="@+id/imageButton"
      android:layout_centerHorizontal="true"
      android:layout_marginBottom="40dp" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_centerVertical="true"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Small font"
      android:id="@+id/button"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Large Font"
      android:id="@+id/button2"
      android:layout_below="@+id/button"
      android:layout_alignRight="@+id/button"
      android:layout_alignEnd="@+id/button" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello World!"
      android:id="@+id/textView"
      android:layout_below="@+id/button2"
      android:layout_centerHorizontal="true"
      android:textSize="25dp" />
      
</RelativeLayout>

در زیر ، محتویات res/values/stringings.xml برای تعریف دو ثابت جدید آورده شده است:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">myapplication</string>
</resources>

 

در زیر ، محتویات پیش فرض AndroidManifest.xml آورده شده است:

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.myapplication" >
      
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.myapplication.MainActivity"
         android:label="@string/app_name" >
      
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      
      </activity>
      
   </application>
</manifest>

اکنون برنامه My Application را اجرا کنید. فرض میکنم AVD را در حین انجام تنظیمات محیط ایجاد کرده اید.
برای اجرای برنامه از Android Studio، یکی از فایل های اکتیویتی پروژه خود را باز کنید و روی آیکون اجرا  در نوار ابزار کلیک کنید. Android Studio ، این برنامه را در AVD خود نصب می کند و آن را اجرا می کند و اگر همه چیز تنظیم باشد و برنامه شما مشکلی نداشته باشد، پنجره Emulator با دو گزینه ی large font و small font را خواهید دید

حال اگر روی دکمه ها کلیک کنید می بینید که اندازه ی فونت Hello World  تغییر می کند. علت این تغییر این است که هنگام رخ دادن هر رویداد کلیک، تابعی که برای کنترل رویداد کلیک شدن هر دکمه ثبت شده است فراخوانی می گردد.

فصلِ: 20 , تعداد قسمت ها: 238 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل رایگان مربوط به مفاهیم php و api نویسی …

توضیحات کلی مجموعه: دوره متخصص اندروید کلیک سایت کامل ترین دوره جامع برنامه نویسی اندروید(حتما دمو دوره را ببینید)   چرا دوره متخصص جایگزین دوره صفرتاصد اندروید شد؟ کلیک سایت تصمیم گرفت …
فصلِ: 30 , تعداد قسمت ها: 182 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت اپلیکیشن علی بابا-آموزش کالبک ها-…

دوره "متخصص" جایگزین دوره صفرتاصد اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دوره صفرتاصد شده است؟چرا باید دوره متخص…
فصلِ: 11 , تعداد قسمت ها: 121 , سطح: صفر تا صد

این فصل در یک نگاه:

عملیات شبیه فیلتر-ساخت الرت دیالوگ وچیدمان براساس فروش-مرتب سازی-نحوه خطایابی-استفاده از bottom sheet در اندروید-سبد خری…

آموزش ساخت اپلیکیشن اندروید دیجی کالا  : ساخت برنامه اندروید یکی از پر طرفدارترین آموزش های کلیک سایت می باشد. با توجه به فراگیر شدن سیستم اندروید و آشنایی افراد با این سیستم ، برنامه های ک…
فصلِ: 3 , تعداد قسمت ها: 179 , سطح: صفر تا صد

این فصل در یک نگاه:

در این دوره آموزشی ، برنامه نویسی اندروید و ios را با استفاده از زامارین خواهیم آموخت. همچنین به صورت کاملا پروژه محور ، اپلیکیشن فروشگاهی مشابه دیجی کالا را پیاده سازی خواهیم کرد. در انته…
فصلِ: 2 , تعداد قسمت ها: 58 , سطح: صفر تا صد

این فصل در یک نگاه:

توضیحات کلی مجموعه: سرفصل های دوره آموزش ساخت اپلیکیشن فیلیمو معرفی اهداف دوره مقدمه و بررسی پیش نیازهای دوره بررسی جزئی و …
فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت api key-آموزش استفاده از GPS گوشی ونمایش مکان شخص برروی نقشه-متصل کردن چند نقطه برروی نقشه با خط-رسم چند ضلعی…

حتما دمو دوره رو ببینید اولین دوره کامل کار با نقشه گوگل ومسیریابی در نقشه گوگل(این اموزش مشابه فارسی ندارد) اموزش کار با نقشه گوگل در برنامه نویسی اندروید یکی از مهم ترین مباحث هست که …
فصلِ: 1 , تعداد قسمت ها: 14 , سطح: صفر تا صد

این فصل در یک نگاه:

ساخت انواع نوتیفیکیشن ها -کار با وب سرویس پوشه-ارسال نوتیفیکیشن با سرویس پوشه-ارسال نوتیفیکیشن با one signal-اموزش کار ب…

با این مجموعه همه چیز در مورد نوتیفیکیشن و فایربیس رو خواهید اموخت یکی از مواردی که در استخدام کاربران در شرکت های برنامه نویسی بسیار موثر هست مبحث کار با firebase هست که ما دراین دوره ام…
فصلِ: 1 , تعداد قسمت ها: 16 , سطح: صفر تا صد

این فصل در یک نگاه:

لیست کردن فایل های صوتی ویدیویی گوشی-طاحی متریال وزیبا-استفاده از تب بندی-حرکت سیک بار همراه با اهنگ وزمان-ست کردن زمان …

توضیحات کلی مجموعه: اموزش ساخت یک موزیک پلیر و ویدیو پلیر ح رفه ای که کاملا کاربردی است و قابلیت نصب روی گوشی های مختلف را دارد از جمله امکانات این اپلیکیشن: لیست کردن فایل های صوتی وید…
فصلِ: 1 , تعداد قسمت ها: 61 , سطح: صفر تا صد

این فصل در یک نگاه:

اموزش ساخت اپلیکیشن کافه بازار-اشتراک گذاری اپلیکیشن-کار با رتروفیت-کاربا ران تیم پرمیشن- کار با فرگمنت ها-کار با sqlite…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دو…
فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد

این فصل در یک نگاه:

پرداخت درون برنامه ای بازار-اموزش فروش سکه-اموزش فروش اشتراک-اموزش فروش نسخه پولی-اموزش چک کردن خرید کردن کاربر-اموزش کا…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 1 , تعداد قسمت ها: 20 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش کامل پیکربندی mvp-اموزش اتصال با سرور با رتروفیت و rxjava-اموزش کار با دیتابیس-آموزش کار با bottom navigation-اموز…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 1 , تعداد قسمت ها: 35 , سطح: متوسط

این فصل در یک نگاه:

این آموزش در یک فصل شامل 35 جلسه آموزش تصویری به همراه سورس کد ارائه شده است.…

سرفصل ها مقدمه و معرفی متد آموزشی بررسی جزئی و خلاصه موارد موردنیاز پیش از آموزش شامل: کار با ویوها،  کار با کتابخانه های مختلف و ... …
فصلِ: 1 , تعداد قسمت ها: 1 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ارسال پیامک با سامانه مدیر پیامک-ارسال کد فعال سازی برنامه با پیامک-اعتبارسنجی کد فعال سازی-ثبت نام در اپلیکیشن با…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 2 , تعداد قسمت ها: 19 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ارسال توکن در اندروید -اموزش امنیت در برنامه نویسی اندروید-اموزش ارسال توکن در هدر در اندروید-اموزش ساخت token -ام…

توضیحات کلی مجموعه: دموی دوره را حتما ببینید دوره امنیت و دیزاین پترن در برنامه نویسی اندروید که شامل دو فصل هست. فصل اول شامل اموزش singletone design patern-builder design patern-command …
فصلِ: 2 , تعداد قسمت ها: 44 , سطح: صفر تا صد

این فصل در یک نگاه:

در فصل دوم این دوره بیشتر میپردازیم به کار با کتابخانه ها و موارد پیشرفته تر مانند دوربین ، ضبط صدا، دیتا بیس ، و .....…

توضیحات کلی مجموعه: سلام خدمت کلیک سایتی های عزیز مجموعه آموزشی صفر تا صد برنامه نویسی اندروید در محیط بیسیک 4 اندروید (basic 4 android) معرفی محیط بیسیک 4 اندروید محیط b4a  تحت کمپانی A…
فصلِ: 3 , تعداد قسمت ها: 61 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل جدید و اپدیت های جدید-آموزش کار با برودکست ریسیور در کاتلین-آموزش چک کردن اتصال به اینترنت در کاتلین-اموزش اپلود کرد…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 5 , تعداد قسمت ها: 21 , سطح: متوسط

این فصل در یک نگاه:

نحوه ارورگیری-رفع ایراد-رفع مشکل-اشتراک گذاری مطالب-ساخت اکتیویتی تنظیمات-اشتراک گذاری مطالب-جستجو کردن…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 5 , تعداد قسمت ها: 128 , سطح: صفر تا صد

این فصل در یک نگاه:

پرداخت درون برنامه ای بازار با کاتلین…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 8 , تعداد قسمت ها: 62 , سطح: صفر تا صد

این فصل در یک نگاه:

اپلود تصاویر روی سرور نود جی اس-کار با کانال در چت- ساخت کانال-ساخت گروه-تفاوت کانال و گروه-انلاین بودن-ارسال تصاویر در …

  توضیحات کلی مجموعه آموزش اندروید اپلیکیشن چت مشابه تلگرام( با استفاده از Socket IO ): دموی مجموعه را حتما ببینید دراین دوره سعی میشود بسیاری از اپشن هایی که اپلیکیشن موبوگرام داراست ر…
فصلِ: 6 , تعداد قسمت ها: 194 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل آپدیت های مربوط به دوره را قرار میدهیم…

با سلام و خسته نباشد خدمت کلیک سایتی های عزیز در ادامه با توضیحات مختصری درمورد دوره ی react native با ما همراه باشید: React Native چیست؟ قطعا یکی از آرزوهای برنامه نویسان این میباشد که ب…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید