ایجاد ui با استفاده از کد نویسی و ثبت (Registerکردن ) event ها برای View ها

بسم الله الرحمن الرحیم

ایجاد ui با استفاده از  کد نویسی  و ثبت  (Registerکردن ) event ها برای   View  ها

فصل سوم-بخش سوم

قبلا  ui برنامه  ها  را با  فایل xml   ایجاد  می کردیم. در کنار این روش  شما  می توانید ui مور نظرتان  را  با   کد نویس ایجادکنید. این  روش   زمانی  که  شما بخواهید ui   در  زمان  اجرا ایجادکنید   بسیار  مفیدمی باشد

در   مثال زیریک ui  را با کدنویسی ایجاد می کنیم.

1-    یک پروژه جدید با  نامUICode  ایجادکرده

2-    دستورات زیر رادر آن  بنویسید.


package com.MehrdadJavidi.uicode;
import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
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);*/
/**---param for views---*/
LayoutParams params =
new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
/**---create a layout---*/
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
/**---create a textview---*/
TextView tv = new TextView(this);
tv.setText("This is a TextView");
tv.setLayoutParams(params);
/**---create a button---*/
Button btn = new Button(this);
btn.setText("This is a Button");
btn.setLayoutParams(params);
/**---adds the textview---*/
layout.addView(tv);
/**---adds the button---*/
layout.addView(btn);
/**---create a layout param for the layout---*/
LinearLayout.LayoutParams layoutParam =
new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT );
this.addContentView(layout, layoutParam);
}
}

F11 را  فشار  دهید   تا برنامه  اجرا شود.

توضیحات

در این مثال مشاهده می کنید که با دستور setContentView() , ui برنامه را از فایل main.xmlبارگزاری نمی کنیم
شما یک شی LayoutParams ایجاد کردیدکه پارامترlayout مربوط به View ها ی که ایجاد کردید تعیین می کند.

LayoutParams params =
new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);


سپس شمایک LinearLayout ایجاد کردید که در بر گیرنده تمام View های می باشد که در برنامه ایجاد می کنید می باشد.


LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);


سپس شما یک TextView و Button ایجاکردید.


/**---create a textview---*/
TextView tv = new TextView(this);
tv.setText("This is a TextView");
tv.setLayoutParams(params);
/**---create a button---*/
Button btn = new Button(this);
btn.setText("This is a Button");
btn.setLayoutParams(params);
/**---adds the textview---*/
btn.setLayoutParams(params);


بعد آنها را به اضافه LinearLayout کردید.


/**---adds the textview---*/
layout.addView(tv);
/**---adds the button---*/
layout.addView(btn);

سپس شما LayoutParams یک ایجادکردیدکه توسط شیLinearLayout استفاده می شود.


LinearLayout.LayoutParams layoutParam =
new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT );


و در آخر هم شیLinearLayout را به Activity اضافه کردید.

this.addContentView(layout, layoutParam);

گوش داده به UI Notification  ها

کاربران در  2  سطح با Ui در  تعامل  هستند.  1:    در  سطح Activity   2  : در  سطح  View

 در سطح  Activity     کلاس Activity  متد های در   اختیار  شما  قرار  می دهد که شما می توانید  آن را   override. کنید

 برخی از  متد های که شما می  توانید که در activity شما می توانید  override  کنید موارد زیر می باشند

  • onKeyDown : زمانی که یک  کلید  فشار داده می شود  اجرا می شود. توسط View  های  که در  Activity   هستند  کنترل  نمی شود.
  •  onKeyUp: زمانی که یک  کلید  فشار داده شده   رها شود  اجرا  می شود توسط View  های  که در  Activity   هستند  کنترل  نمی شود.
  • onMenuItemSelected زمانی  که  منو های  انتخاب می شوند  اجرا می شود   که در فصل 5  شرح می دهیم
  • onMenuOpened:زمانی که   پنل منو ها نمایش داده می شوند  اجرا می شود

 

Override کردن  متد ها   تعریف شده  در Activity  ها

برای انکه  شرح  دهیم  که  چگونه  Activity  ها با  کاربران در  تعامل  هستند  آن را  با  یک  مثال شرح می دهیم و  بعضی از  متد ها  که از  کلاس  پایه   Activity   مشتق شده اند را  override  می کنیم

 

پروژه جدید  به نام UIActivity. ایجاد  کنید

دستورات  زیر را در  main.xml قرار دهید.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<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>

دستورات زیر را در  فایل  mainActivity.java قرار دهید

package com.MehrdadJavidi.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;
}
}

توضیحات

زمانی که بactivity  بار گذاری می شود  شما   اشاره  گر  چشمک زن  رو در   EditText  می  بینید

در activity   ما  متد  onKeyDown() را   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 ;
}

ثبت  (Registerکردن ) event ها برای   View  ها

View  ها  می  توانید  یک  رویداد  را  زمانی که  باکاربر در تعامل  هستند را   اجرا  کنند.

به  عنوان   مثال  زمانی که کاربر  بر روی  یگ  button    کلیک می  کند  باید عملیاتی   انجام شود و  شما  نیاز دارید   که به طور  صریح  رویداد برای  آنها    ثبت   کنید. که در ادامه   آن را با یک  مثال شرح می دهیم

 

به  پروژه قبلی  رفته  و دستورات  زیر را در  mainActivity  وارد  نمایید.


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);
/**---the two buttons are wired to the same event handler---*/
Button btn1 = (Button)findViewById(R.id.btn1);
btn1.setOnClickListener(btnListener);
Button btn2 = (Button)findViewById(R.id.btn2);
btn2.setOnClickListener(btnListener);
}
/**---create an anonymous class to act as a button click listener---*/
private OnClickListener btnListener = new OnClickListener()
{
public void onClick(View v)
{
Toast.makeText(getBaseContext(),
((Button) v).getText() + " was clicked",
Toast.LENGTH_LONG).show();
}
};

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

بر روی  دکمه های Okو Cancel  کلیک   کنید.

در   کنار   روش  بالا که  پارامتر setOnClickListener  را  متد btnListener  دادیم که این روش را به عنوان  anonymous class شناخته می شود روش دیگر   هم  وجود دارد که به عنوان anonymous inner class  شناخته می شود نیازی به  تعریف  متد جداگانه ای  نمی باشد. که در  ادامه آن را به  یک  مثال شرح می دهیم


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**---the two buttons are wired to the same event handler---*/
Button btn1 = (Button)findViewById(R.id.btn1);
btn1.setOnClickListener(btnListener);
Button btn2 = (Button)findViewById(R.id.btn2);
btn2.setOnClickListener(btnListener);
/**---create an anonymous inner class to act as an onfocus listener---*/
EditText txt1 = (EditText)findViewById(R.id.txt1);
txt1.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
@Override
public void onFocusChange(View v, boolean hasFocus) {
Toast.makeText(getBaseContext(),
((EditText) v).getId() + " has focus -" + hasFocus,
Toast.LENGTH_LONG).show();
}
});
}

برای  تعیین  رویداد  button   به روش anonymous inner class به صورت  زیر  عمل  می  کنیم


Button btn1 = (Button)findViewById(R.id.btn1);
/**btn1.setOnClickListener(btnListener);*/
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
/**---do something---*/
}
});
Button btn2 = (Button)findViewById(R.id.btn2);
/**btn2.setOnClickListener(btnListener);*/
btn2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
/**---do something---*/
}
});

نظرات (۰)

هيچ نظري هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی