1168 نیروی متخصص آماده کـار برای شمـا هستند
حالا پروژه خود را ایجاد کنید
تعداد طراحان اندروید 1029
تعداد نرم افزار های اندروید 0
تعداد طراحان آی او اس 1007
تعداد نرم افزارهای آی او اس 0
آخرین اخبار سایت
کنترل رویدادها در رابط کاربری

کنترل رویدادها در رابط کاربری

سطح اکتیویتی و سطح View دو سطحی هستند که تعاملات کاربر با رابط کاربری در آن ها انجام می شود. در سطح اکتیویتی با کلاس Activity متدهای مورد نیاز در اختیارتان قرار خواهد گرفت. در این جا بعضی از این متدها که می توانید در اکتیویتی خود از آنها بهره ببرید ذکر شده است:

  • onKeyDown : وقتی کلیدی فشرده می شود که هیچ View یی از اکتیویتی آن را کنترل نکرده باشد.
  • onKeyUp : وقتی کلیدی رها می شود که هیچ view یی از اکتیویتی آن را کنترل نکرده باشد.
  • onMenuItemSelected : هنگامی که گزینه ای از منو توسط کاربر انتخاب شود.
  • onMenuOpened : هنگامی که پنل منو توسط کاربر باز شود.

Override کردن متدهای موجود دراکتیویتی

برای دیدن چگونگی تعامل اکتیویتی ها با کاربر، تمرین زیر را که چند متد از کلاس پایه اکتیویتی را پیاده سازی میکند ،انجام میدهیم.

1.یک پروژه ی ایجاد کرده نام آن را UIActivity بگذارید.

2.در فایل main.xml تغییرات زیر را اعمال کنید:

<?”xml version=”1.0” encoding=”utf-8?>
LinearLayout>
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
”android:orientation=”vertical  
”xmlns:android=”http://schemas.android.com/apk/res/android  
<
TextView>
”android:layout_width=”214dp  
”android:layout_height=”wrap_content  
”android:text=”Your Name  
</
EditText>
”android:id=”@+id/txt1  
”android:layout_width=”214dp  
”android:layout_height=”wrap_content  
</
Button>
”android:id=”@+id/btn1  
”android:layout_width=”106dp  
”android:layout_height=”wrap_content  
”android:text=”OK  
</
Button>
”android:id=”@+id/btn2  
”android:layout_width=”106dp  
”android:layout_height=”wrap_content  
”android:text=”Cancel  
</
<LinearLayout/>

 

3.تغییرات زیر را در فایل MainActivity.java اعمال کنید:

;package net.learn2develop.UIActivity
;import android.app.Activity
;import android.os.Bundle
;import android.view.KeyEvent
;import android.widget.Toast
} public class MainActivity extends Activity 
/* .Called when the activity is first created **/
Override@
} (public void onCreate(Bundle savedInstanceState    
;(super.onCreate(savedInstanceState       
;(setContentView(R.layout.main      
{ 
Override@
(public boolean onKeyDown(int keyCode, KeyEvent event)
}
(switch (keyCode
}
:case KeyEvent.KEYCODE_DPAD_CENTER 
(),Toast.makeText(getBaseContext   
,”Center was clicked“ 
;()Toast.LENGTH_LONG).show   
;break 
:case KeyEvent.KEYCODE_DPAD_LEFT
,()Toast.makeText(getBaseContext  
”,Left arrow was clicked“
;()Toast.LENGTH_LONG).show   
;break  
:case KeyEvent.KEYCODE_DPAD_RIGHT 
,()Toast.makeText(getBaseContext  
,”Right arrow was clicked“
;()Toast.LENGTH_LONG).show  
;break 
:case KeyEvent.KEYCODE_DPAD_UP  
,()Toast.makeText(getBaseContext  
,”Up arrow was clicked“   
;()Toast.LENGTH_LONG).show  
;break 
:case KeyEvent.KEYCODE_DPAD_DOWN  
,()Toast.makeText(getBaseContext  
,”Down arrow was clicked“    
,()Toast.LENGTH_LONG).show  
;break
{
;return false
{
{

 

4.برنامه را اجرا کنید.

5.هنگامی که اکتیویتی را بارگذاری کردید ، در EditText متنی بنویسید.بعد روی فلش پایین در پد جهت ها کلیک کنید.پیامی نشان داده خواهد شد.

وقتی اکتیویتی کارش را شروع کرد ، cursor در حالت چشمک زن در EditText قرار میگیرد ، چون بر روی این view فوکوس شده است.در کلاس MainActivity متد ()onKeyDown از کلاس پایه Activity را پیاده سازی کنید:

Override@
(public boolean onKeyDown(int keyCode, KeyEvent event
}
(switch (keyCode)
}
:case KeyEvent.KEYCODE_DPAD_CENTER
...//
;break 
:case KeyEvent.KEYCODE_DPAD_LEFT  
...//
;break
:case KeyEvent.KEYCODE_DPAD_RIGHT 
...//
;break 
:case KeyEvent.KEYCODE_DPAD_UP  
...//
;break 
:case KeyEvent.KEYCODE_DPAD_DOWN  
...//
;break 
{ 
;return false

 

هنگام فشردن  کلید ، view یی که در حالت فوکوس قرار دارد، سعی می کند تا این رویداد را کنترل یا به اصطلاح Handle کند. در مثال فوق وقتی که EditText فوکوس شد و شما متنی وارد کردید، این view رویداد اتفاق افتاده را کنترل کرده و متنی که شما وارد کردید را نمایش می دهد. حال اگر روی کلیدهای فلش بالا یا پایین کلیک کنید، دیگر EditText آن را کنترل نمی کند و این رویداد به اکتیویتی سپرده می شود. در این مورد,متد ()onKeyDown فراخوانی می شود. در این مثال کلید فشرده شده شناسایی و با توجه به آن، پیامی نمایش داده شد. حالا دکمه OK که view بعدی است، فوکوس شده، چون فلش پایین به معنای انتخاب view بعدی است. وقتی که در EditText متنی وجود داشته باشد و cursor در پایان متن باشد ، با فشردن فلش سمت چپ ، متد()inKeyDown فراخوانی نخواهد شد چون این دکمه، cursor را یک کاراکتر به سمت چپ می برد به این دلیل که خود EditText این رویداد را کنترل می کند. اگر در انتهای متن باشید و فلش سمت راست را بزنید متد()onKeyDown فراخوانی می شود. چون دیگر در سمت راست متنی وجود ندارد تا EditText با کنترل این رویداد روی آن عملیاتی انجام دهد.اما وقتی cursor در ابتدای متن باشد، خود view این رویداد را کنترل می کند.حالا اگر فلش چپ را بزنید متد ()onKeyDown فراخوانی خواهد شد چون در سمت چپ متنی وجود ندارد.

وقتی که دکمه ی OK فوکوس شده باشد, دکمه ی وسط پنل جهات را فشار دهید.توجه کنید که پیام Center was clicked به این دلیل نمایش داده نشد که خود دکمه این رویداد را کنترل می کند.بنابراین این رویداد متد()onKeyDown را فراخوانی نخواهد کرد.همچنین توجه کنید که متد ()onKeyDown یک مقدار از نوع Boolean را به عنوان نتیجه بر میگرداند. باید مقدار true را برگردانیم تا سسیستم وقت بیشتری را برای پردازش رویداد نگذارد. در مثال زیر همین کار را انجام داده ایم:

Override@
(public boolean onKeyDown(int keyCode, KeyEvent event
}
(switch (keyCode
}
:case KeyEvent.KEYCODE_DPAD_CENTER
,()Toast.makeText(getBaseContext   
,”Center was clicked“    
;()Toast.LENGTH_LONG).show    
;return true  
:case KeyEvent.KEYCODE_DPAD_LEFT  
,()Toast.makeText(getBaseContext     
,”Left arrow was clicked“     
;()Toast.LENGTH_LONG).show   
;return true   
:case KeyEvent.KEYCODE_DPAD_RIGHT  
,()Toast.makeText(getBaseContext    
,”Right arrow was clicked“     
;()Toast.LENGTH_LONG).show    
;return true
:case KeyEvent.KEYCODE_DPAD_UP 
,()Toast.makeText(getBaseContext    
,”Up arrow was clicked“      
;()Toast.LENGTH_LONG).show     
;return true  
:case KeyEvent.KEYCODE_DPAD_DOWN 
,()Toast.makeText(getBaseContext     
,”Down arrow was clicked“      
;()Toast.LENGTH_LONG).show    
;return true  
{ 
;return false  
{ 

  • دسته بندی :
  • تاریخ انتشار : 11 اردیبهشت 1396
  • بازدید : 661

برچسب ها :