1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش برنامه نویسی اندروید

شروع موضوع توسط minaaa ‏10/2/14 در انجمن اندرویید

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش برنامه نویسی اندروید

    [​IMG] برنامه نویسی

    [h=1]آموزش برنامه نویسی اندروید - قسمت ۴۱: ساخت اپلیکیشن ذکر شمار (بخش دوم) نحوه وارد کردن متون فارسی به اپلیکیشن‎[/h]
    اهداف آموزشی این قسمت عبارتند از:
    1. نحوه نوشتن یک متن فارسی در اپلیکیشن
    2. نحوه تنظیم Emulator به منظور نمایش دادن متون فارسی

    پس از ساخت یک TextView در آموزش پیش در این آموزش قصد داریم به بررسی این نکته بپردازیم که به چه نحوی می توان متون فارسی را وارد اپلیکیشن خود نماییم. برای این منظور پروژه ای که در آموزش چهلم تحت عنوان My Prayer Counter ایجاد کردیم را در محیط اکلیپس باز نموده و دو بار روی فایل main.xml را از فولدر layout کلیک کرده تا باز شود.



    • <?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:background="#fbfbdd"
    • android:orientation="vertical" >
    • <TextView
    • android:id="@+id/txt_textOne"
    • android:layout_width="wrap_content"
    • android:layout_height="wrap_content"
    • android:text="Large Text"
    • android:textAppearance="?android:attr/textAppearanceLarge"
    • android:textColor="#763f05"
    • android:textSize="40dip" />
    • </LinearLayout>

    همانطور که در کد فوق مشاهده می کنیم، متدی تحت عنوان text وجود دارد که Value یا مقدار مرتبط با آن Large Text است. ما به سادگی قادر خواهیم بود تا این متن را به هر متن فارسی که تمایل داشته باشیم تبدیل کنیم که در این آموزش عبارت "تعداد ذکرهای من" را جایگزین می کنیم:



    • <?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:background="#fbfbdd"
    • android:orientation="vertical" >
    • <TextView
    • android:id="@+id/txt_textOne"
    • android:layout_width="wrap_content"
    • android:layout_height="wrap_content"
    • android:text="تعداد ذکرهای من"
    • android:textAppearance="?android:attr/textAppearanceLarge"
    • android:textColor="#763f05"
    • android:textSize="40dip" />
    • </LinearLayout>

    حال روی Tab مربوط به Graphical Layout کلیک کرده تا ببینیم خروجی این متن فارسی روی UI به چه شکلی است:

    [​IMG]
    همانطور که در تصویر فوق به خوبی نشان داده شده است، اکلیپس از نشان دادن متن فارسی ما ناتوان است اما این در حالی است که به هیچ وجه جای نگرانی نیست چرا که اگر اپلیکیشن خود را روی یک دستگاه واقعی اجرا کنیم خواهیم دید که متن فارسی ما به درستی نمایش داده خواهد شد. اکنون یک بار اپلیکیشن خود را روی Emulator اجرا می کنیم تا ببینیم که اپلیکیشن ما به چه شکل درآمده است:

    [​IMG]
    همانگونه که در تصویر فوق مشخص است دستگاه مجازی قادر به نمایش صحیح اپلیکیشن ما نمی باشد. چنانچه بخواهیم علت این مسئله را مورد بررسی قرار دهیم بایستی بگوییم از آنجا که در حین ساخت دستگاه مجازی از بخش Target نسخه Android 2.1 را انتخاب کرده ایم و این نسخه از سیستم عامل اندروید قادر به نمایش متون فارسی نیست، از اینرو اپلیکیشن ما به درستی روی دستگاه مجازی اجرا نخواهد شد. برای این منظور دو راه کار وجود دارد. راه کار اول اینکه یک دستگاه مجازی دیگر ایجاد کرده و حتماً به خاطر داشته باشیم که در تنظیمات آن در بخش Target حتماً نسخه Android 3.0 به بالا را مد نظر قرار دهیم و یا اینکه همین دستگاه مجازی را ویرایش کرده و نسخه Target آن را ارتقاء دهیم. چنانچه بخواهیم یک دستگاه مجازی را ویرایش کنیم می بایست مطابق تصویر زیر پیش رویم:

    [​IMG]
    همانطور که مشخص است ابتدا با کلیک بر روی گزینه مد نظر آن را انتخاب نموده سپس با کلیک روی گزینه Edit به پنجره زیر دست پیدا خواهیم کرد:

    [​IMG]
    حال در بخش Target از منویی که پیش رو داریم می توانیم نسخه Android 3.0 به بالا را انتخاب نموده و در نهایت روی دکمه Edit AVD کلیک نماییم. اکنون مجدد به پنجره قبل بازگشته و با کلیک بر روی دکمه Start می توانیم دستگاه مجازی ویرایش شده خود را اجرا نماییم. پس از اجرای دستگاه مجازی که ممکن است کمی هم تا کاملاً اجرا شود به طول انجامد مجدد روی دکمه Run کلیک می کنیم:

    [​IMG]
    همانگونه که در تصویر فوق مشخص است، این دستگاه مجازی جدید قادر به نمایش متون فارسی هم می باشد(لازم به ذکر است که اگر این دستگاه مجازی به صورت پیش فرض به صورت افقی بود با فشردن هم زمان دکمه های Ctrl و F12 می توان آنرا به صورت عمودی در آورد و بالعکس). نکته ای که در مورد UI وجود دارد این است که این TextView در مرکز رابط گرافیکی قرار ندارد. به منظور مرکز قرار دادن کلیه عناصر روی رابط گرافیکی نیاز است تا ابتدا Layout خود را با نشانگر موس انتخاب کنیم. برای این منظور در هر جایی روی UI به جزء TextView کلیک می کنیم تا کل Layout انتخاب شود. حال به پنجره Properties رفته و مطابق تصویر زیر تغییراتی را اعمال می کنیم:

    [​IMG]
    با کلیک کردن در بخش Value مرتبط با متد Gravity همانطور که در تصویر فوق نشان داده شده است دکمه ای ظاهر می شود که با کلیک روی آن به پنجره زیر دست پیدا خواهیم کرد:

    [​IMG]
    در پنجره فوق کلیه مقادیری که می توان برای متد gravity در نظر گرفت نشان داده شده است و همانگونه که از نام آنها بر می آید با اعمال هر یک از آنها جایگاه کلیه عناصر قرار گرفته روی UI تغییر خواهد کرد. به طور مثال چنانچه بخواهیم کلیه عناصر در مرکز Layout قرار گیرند می بایست Value مرتبط با center را تیک بزنیم اما از آنجا که در این آموزش قصد داریم تا TextView ما در مرکز قرار گرفته اما در عین حال در بالای Layout هم قرار گیرد می بایست گزینه center-horizontal را تیک بزنیم(به عنوان فعالیت تمرینی می توان تک تک آنها را تیک زده سپس به Graphical Layout رجوع کنیم تا ببینیم که هر یک از آنها چه عملکردی دارا است). حال روی گزینه OK کلیک می کنیم و مجدد اپلیکیشن خود را اجرا می کنیم:

    [​IMG]
    می بینیم که متن ما در وسط UI قرار گرفته است. حال نیاز داریم تا یک TextView دیگر زیر TextView قبلی ایجاد کنیم که نقش کنتور یا شمارنده را داشته باشد (به منظور جلوگیری از طولانی شدن آموزش از ذکر توضیحات پیرامون نحوه ایجاد TextView جدید خودداری می نماییم).

    تنها نکته ای که پیرامون این TextView جدید وجود دارد این است که اندازه متن آن را می بایست برابر با 60dip قرار دهیم که تعداد ذکرهایی که می گوییم بزرگتر به نظر آید و همچنین id اختصاص داده شده به آن را می بایست به خاطر داشت باشیم چرا که در فایل جاوای خود قرار است که به این TextView لینک دهیم. راه کاری جایگزینی که برای اختصاص یک id به عناصر روی UI وجود دارد این است که روی TextView مد نظر کلیک راست کرده سپس همانطور که در تصویر زیر مشخص است روی گزینه Edit ID کلیک نماییم:

    [​IMG]
    پس از کلیک کردن روی گزینه Edit ID با پنجره زیر مواجه خواهیم شد:

    [​IMG]
    حال همانند id یی که برای TextView اول اختصاص دادیم، ابتدا عبارت txt را نوشته که یک عبارت قراردادی است و اصلا الزامی نیست که آن را نوشت بلکه هر توسعه دهنده برای خود یک روش نامگذاری را انتخاب می کند. سپس یک علامت _ قرار داده و عبارت textTwo به معنی "متن دوم" را می نویسیم (لازم به ذکر است که TextView اولی که ایجاد کردیم را به هیچ وجه در کد جاوای خود لینک نخواهیم داد اما از آنجا که عادت خوبی است که برای کلیه عناصر روی رابط گرافیکی یک id در نظر بگیریم اینکار را انجام دادیم).

    حال روی دکمه OK کلیک کرده و این id به TextView دوم ما اختصاص خواهد یافت. در ادامه تکمیل اپلیکیشن خود نیاز به یک دکمه داریم تا با هر بار گفتن یک ذکر یک بار با انگشت خود روی آن بزنیم تا یک عدد به تعداد ذکر های گفته شده اضافه کند. برای این منظور یک دکمه روی UI خود ایجاد می کنیم (برای آشنایی بیشتر با مبحث دکمه ها به آموزش های 37 و 38 و 39 مراجعه نمایید).

    [​IMG]
    به منظور اینکه ببینیم چه کد 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:background="#fbfbdd"
    • android:gravity="center_horizontal"
    • android:orientation="vertical" >
    • <TextView
    • android:id="@+id/txt_textOne"
    • android:layout_width="wrap_content"
    • android:layout_height="wrap_content"
    • android:text="تعداد ذکرهای من"
    • android:textAppearance="?android:attr/textAppearanceLarge"
    • android:textColor="#763f05"
    • android:textSize="40dip" />
    • <TextView
    • android:id="@+id/txt_textTwo"
    • android:layout_width="wrap_content"
    • android:layout_height="wrap_content"
    • android:text="0"
    • android:textAppearance="?android:attr/textAppearanceLarge"
    • android:textColor="#763f05"
    • android:textSize="60dip" />
    • <Button
    • android:id="@+id/button1"
    • android:layout_width="140dip"
    • android:layout_height="wrap_content"
    • android:background="#763f05"
    • android:text="+"
    • android:textColor="#fbfbdd"
    • android:textSize="100dip" />
    • </LinearLayout>

    چنانچه به تگ ابتدایی مربوط به Button توجه کنیم می توانیم ببینیم که چه خصوصیاتی برای آن در نظر گرفته شده است. تنها بخشی از کد مربوط به این دکمه که نیاز به تغییر دارد id اختصاص یافته به آن است که ترجیح می دهیم برای آنکه گویا تر باشد آنرا را به btn_buttonOne تغییر دهیم. نکته ای که در مورد id ها همواره بایستی به خاطر داشته باشیم این است که هر نامی را می توان برای id ها در نظر گرفت اما به هیچ وجه در انتخاب نام آنها نمی توانیم از علائمی همچون & و* و غیره استفاده کنیم.

    پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
    1. به چه شکل می توان متون فارسی را در دستگاه مجازی نمایش داد؟
    2. علت آنکه متون فارسی در دستگاه مجازیی با Target یی معادل با Android 2.1 اجرا نمی شود چیست؟
    3. چگونه می توان عناصر روی یک Layout را وسط چین نمود؟
     
    یک شخص از این تشکر کرد.
  2. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش برنامه نویسی اندروید

    [​IMG] برنامه نویسی

    [h=1]آموزش برنامه نویسی اندروید قسمت ۴۲: آموزش ساخت اپلیکیشن ذکر شمار (بخش سوم) نحوه به کارگیری TextView ها‎[/h]
    اهداف آموزشی این قسمت عبارتند از:
    1. معرفی view ها در سیستم عامل اندروید
    2. نحوه به کار گیری از کلاس TextView در اپلیکیشن
    3. نحوه به کار گیری از کلاس Button در اپلیکیشن

    پس از ساخت رابط گرافیکی کاربر اپلیکیشن ذکر شمار در دو آموزش گذشته، در این آموزش قصد داریم تا فایل جاوای اپلیکیشن خود را به دکمه ایجاد شده و همچنین TextView یی که مسئول نمایش تعداد ذکرهای گفته شده است لینک دهیم.

    برای همین منظور پروژه My Prayer Counter را باز کرده و این بار فایل جاوای اپلیکیشن یا به عبارت دیگر همان Activity اپلیکیشن خود که MainActivity.java نام دارد را باز می کنیم (لازم به ذکر است که این فایل همانطور که در تصویر زیر مشخص است در فولدر src در زیرشاخه پکیجی که برای اپلیکیشن خود در نظر گرفتیم قرار دارد):

    [​IMG]
    پس از باز کردن این فایل در محیط اکلیپس با کد زیر مواجه خواهیم شد:



    • package com.behzadmoradi.myprayercounter;
    • import android.app.Activity;
    • import android.os.Bundle;
    • 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);
    • }
    • }

    به طور کلی می توان گفت که کد فوق به منزله حداقل کدی است که یک اپلیکیشن اندرویدی می تواند داشته باشد (به منظور آشنایی بیشتر با بخش های مختلف کد فوق می توانید به آموزش بیست و هفتم مراجعه نمایید).

    از آنجا که قرار است در این اپلیکیشن تعداد ذکرهای گفته شده شمرده شود پس معلوم است که ما با اعدادی از جنس عدد صحیح سر و کار داریم. همانطور که می دانیم یکی از متغیرهایی که مسئول ذخیره سازی اعدادی از جنس عدد صحیح است متغیر int می باشد (جهت آشنایی بیشتر با انواع متغیرها در زبان برنامه نویسی جاوا به آموزش پنجم از سری آموزش های جاوا در سایت نردبان مراجعه نمایید).

    حال نیاز است تا متغیری از جنس int در اپلیکیشن خود ایجاد کنیم که این وظیفه را دارا است تا تعداد ذکرها را در خود ذخیره سازد. نامی که برای این متغیر در نظر خواهیم گرفت counter به معنی "شمارنده" است. در پاسخ به این سوال که کجا بایستی این متغیر را تعریف کنیم بایستی گفت که این متغیر را در کلاس MainActivity تعریف کرده سپس داخل متد onCreate مقداری را برای آن در نظر خواهیم گرفت:



    • package com.behzadmoradi.myprayercounter;
    • import android.app.Activity;
    • import android.os.Bundle;
    • public class MainActivity extends Activity {
    • /** Called when the activity is first created. */
    • int counter;
    • @Override
    • public void onCreate(Bundle savedInstanceState) {
    • super.onCreate(savedInstanceState);
    • setContentView(R.layout.main);
    • counter = 0;
    • }
    • }

    همانطور که در کد فوق مشخص است داخل متد onCreate مقدار صفر را برای متغیر counter در نظر گرفته ایم. از آنجا که در این اپلیکیشن از دکمه ها و TextView ها استفاده می کنیم پس نیاز است تا کلاس های Button و TextView را در اپلیکیشن خود فرا بخوانیم. ابتدا کلاس TextView را در وارد برنامه کرده و TextView یی که مسئول نمایش تعداد ذکرها بود و دارای id یی معادل با txt_textTwo بود را به آن لینک می دهیم:

    [​IMG]
    اگر به تصویر فوق خوب دقت کنیم می بینیم که کد مربوط به TextView به پنج قسمت مجزا تقسیم شده است. بخش شماره یک مربوط به کلاسی تحت عنوان TextView در SDK اندروید است که توسط طراحان این سیستم عامل نوشته شده است. اگر به این TextView توجه کنیم می بینیم که دور آن نقطه چین قرار گرفته است و این بدان معنی است که این کلاس به اپلیکیشن ما Import نشده است. برای این رفع این مشکل نیاز است تا نشانگر موس خود را روی نقطه چین قرار داده و همانطور که در تصویر زیر مشخص است گزینه Import ‘TextView’ android.widget را انتخاب نماییم:

    [​IMG]
    اکنون پس از کلیک روی این گزینه خواهیم دید که این کلاس وارد اپلیکیشن خواهد شد:

    [​IMG]
    همانطور که در تصویر فوق مشخص است پس از Import کردن این کلاس نقطه چین هشدار دهنده از بین رفته و همچنین کلاس TextView به بخش import ها که در بالای کد قرار دارد اضافه می شود و از این پس به کلیه متدهای مرتبط با کلاس TextView دسترسی خواهیم داشت. همانطور که می دانیم کلاس هایی که در زبان جاوا مورد استفاده قرار می دهیم می بایست دارای نامی باشند. مثلا اگر در یک برنامه جاوا از کلاس String استفاده کنیم حتماً می بایست برای آن نامی در نظر بگیریم. در اینجا نامی که در نظر گرفته ایم و دلخواه هم هست tView است که مثلا حرف t را مخفف واژه Text در نظر گرفته ایم. به خاطر داشته باشیم که این نام با نامی که برای TextView خود در XML در نظر گرفتیم متفاوت است. در واقع در ادامه آموزش خواهیم دید که به چه شکل می توان TextView ایجاد شده در XML را به کلاس TextView در جاوا لینک داد. اکنون یک علامت مساوی قرار داده و کلاس TextView را داخل پرانتز مقابل علامت مساوی می نویسیم یا به عبارت دیگر آن را Cast می کنیم. مورد شماره سه مربوط به Cast است (برای آشنایی بیشتر با مفهوم Cast به سری آموزش های برنامه نویسی جاوا در سایت نردبان قسمت 34 و 35 مراجعه نمایید).

    اینکه چرا بایستی یک TextView را در اندروید Cast به خود آن TextView کرد مسئله ای است که کمی نیاز به توضیح دارد.

    به طور کلی هرچیزی از دکمه گرفته تا TextView یا هرچیزی دیگری در سیستم عامل اندروید نمونه ای از کلاس View محسوب می شوند. از اینرو همواره با Cast کردن مثلاً یک TextView به خود آن TextView به اندروید می فهمانیم که این این View یک Button یا Image نیست بلکه یک TextView است که در غیر اینصورت یعنی چنانچه عمل Cast کردن صورت نگیرد اندروید در تشخیص دادن مابین View های مختلف با مشکل مواجه خواهد شد. مورد چهارم مربوط به findViewById است. به خاطر داشته باشیم که در این مرحله از کدنویسی نیازی به نوشتن کل عبارت فوق نیست بلکه با نوشتن کلمه find و فشردن هم زمان دکمه های Ctrl و Space اکلیپس به صورت خوکار این عبارت را برای ما تکمیل خواهد کرد. همانطور که در قست بالا توضیح دادیم هر چیزی در اندروید یک View محسوب می شود. حال کاری که این خط از کد انجام می دهد این است که View یی که مد نظر ما است را از طریق id اختصاص داده شده به آن در XML پیدا می کند.

    گزینه شماره پنج نشانگر id اختصاص داده شده به TextView یی است که مسئول نمایش تعداد ذکرها می باشد (به منظور آشنایی بیشتر با R که داخل پرانتز نوشته شده است به آموزش نهم مراجعه نمایید). در پایان یک علامت ; قرار داده و در این قسمت لینک دادن id مرتبط با TextView قرار گرفته در فایل XML به کلاس TextView در فایل جاوا به پایان می رسد.

    علت آنکه در دو آموزش گذشته اصرار داشتیم تا id هایی را که اکلیپس به صورت خودکار برای TextView ها و Button ها در نظر می گرفت را تغییر دهیم اینجا مشخص خواهد شد. در واقع به منظور تکمیل کد داخل پرانتز می توان اول حرف R را نوشته سپس یک نقطه قرار داد سپس id را نوشته سپس یک نقطه قرار داد و اگر در این مرحله دکمه های Ctrl و Space را فشار دهیم با عکس زیر مواجه خواهیم شد:

    [​IMG]
    همانگونه که مشخص است کلیه id هایی که با txt شروع می شوند دنبال یکدیگر قرار گرفته اند که در این صورت به راحتی خواهیم توانست به id مد نظر دست پیدا کنیم. به عبارت دیگر id ها بر اساس پیشوندی که دارند Sort یا مرتب شده اند.

    طبق روش فوق الذکر کلاس Button اندروید را نیز وارد اپلیکیشن کرده و نامی همچون btn برای آن در نظر گرفته، آن را Cast می کنیم به Button و در نهایت آن را به دکمه ای که در فایل XML ایجاد کرده بودیم که دارای id یی معادل با btn_buttonOne بود لینک می دهیم. در این مرحله کد ما می بایست به صورت زیر باشد:



    • package com.behzadmoradi.myprayercounter;
    • import android.app.Activity;
    • import android.os.Bundle;
    • import android.widget.Button;
    • import android.widget.TextView;
    • public class MainActivity extends Activity {
    • /** Called when the activity is first created. */
    • int counter;
    • @Override
    • public void onCreate(Bundle savedInstanceState) {
    • super.onCreate(savedInstanceState);
    • setContentView(R.layout.main);
    • counter = 0;
    • TextView tView = (TextView) findViewById(R.id.txt_textTwo);
    • Button btn = (Button)findViewById(R.id.btn_buttonOne);
    • }
    • }

    پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
    1. چرا در این اپلیکیشن از متغیری استفاده می کنیم که برای ذخیره سازی اعداد صحیح است؟
    2. چرا در استفاده از یکی از کلاس های TextView یا Button در اندروید بایستی آنها را به خودشان Cast کرد؟
    3. منظور از اینکه هر چیزی در اندروید یک View محسوب می شود چیست؟
     
    یک شخص از این تشکر کرد.
  3. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش برنامه نویسی اندروید

    [​IMG] برنامه نویسی

    [h=1]آموزش برنامه نویسی اندروید - قسمت ۴۳: آموزش ساخت اپلیکیشن ذکر شمار (بخش چهارم) معرفی متدهای مرتبط با کلاس Button در اندروید[/h]
    اهداف آموزشی این قسمت عبارتند از:
    1. معرفی متدهای مرتبط با کلاس Button در اندروید
    2. معرفی متد setText
    3. آشنایی با نوع پارامتری که می توان در متد setText قرار داد

    پس از فراخوانی موفقیت آمیز کلاس Button در آموزش قسمت چهل و دوم، در این آموزش در ادامه ساخت اپلیکیشن "ذکر شمار مادر بزرگ" قصد داریم تا به معرفی متدهای مرتبط با کلاس Button در اندروید بپردازیم. در حقیقت با استفاده از متدهای مرتبط می بایست به اپلیکیشن خود دستور دهیم تا زمانیکه روی دکمه کلیک شد چه کاری را انجام دهد.

    برای شروع کار پروژه ای که تحت عنوان My Prayer Counter ایجاد کردیم را باز کرده و همانگونه که در آموزش گذشته توضیح دادیم فایل MainActivity.java را در محیط برنامه نویسی اکلیپس باز می کنیم:


    package com.behzadmoradi.myprayercounter; import android.app.Activity; import android.os.Bundle; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { /** Called when the activity is first created. */ int counter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); counter = 0; TextView tView = (TextView) findViewById(R.id.txt_textTwo); Button btn = (Button)findViewById(R.id.btn_buttonOne); } }
    همانگونه که در کد فوق می بینیم موفق شده ایم تا یک شیئ از روی کلاس Button که در SDK اندروید قرار دارد تحت عنوان btn بسازیم. حال از آنجا که کلاس Button را به اپلیکیشن خود import کرده ایم می توانیم به کلیه متدهای مرتبط با این کلاس دسترسی داشته باشیم. از این رو اول نام شیئ ساخته شده از روی کلاس Button را نوشته سپس یک نقطه قرار داده و همانطور که در تصویر زیر مشخص است به کلیه متدهای مرتبط با کلاس Button دسترسی خواهیم داشت. چنانچه بخواهیم دکمه ای پس از آنکه روی آن کلیک شد کاری انجام دهد به متدی تحت عنوان setOnClickListener نیاز داریم. در واقع اگر بخواهیم این متد را به صورت تحت الفظی ترجمه می کنیم بایستی بگوییم که این متد معادل است با "اگر دکمه فشار داده شد به حرف کاربر گوش بده و یه کاری انجام بده" :

    [​IMG]
    همانگونه که در تصویر فوق مشخص است پس از نوشتن نام شیئی که از روی کلاس Button ایجاد کردیم و قرار دادن یک نقطه و نوشتن ابتدای نام متد مد نظر و فشردن هم زمان کلیدهای Ctrl و Space پنجره ای باز خواهد شد که کلیه متدهای مرتبط با کلاس Button را به ما نشان خواهد داد. اکنون متد مد نظر را از این لیست پیدا نموده و روی آن کلیک می کنیم. حال کد ما به شکل زیر در خواهد آمد:

    [​IMG]
    در حقیقت آنچه که مابین دو پرانتز این متد قرار می گیرد به عنوان پارامتر این متد خواهد بود. به طور کلی می توان گفت که ما در حال حاضر هیچ گونه OnClickListener یی نداریم پس بایستی یکی برای این دکمه بسازیم. از این روی کلید واژه new را نوشته یک فاصله قرار داده سپس عبارت View را نوشته و کلید های Ctrl و Space را به صورت هم زمان فشار می دهیم:

    [​IMG]
    همانطور که در تصویر فوق نشان داده شده است می بایست روی گزینه ای که حاوی View.OnClickListener است کلیک کنیم. در واقع از آنجا که متد OnClickListener بخشی از کلاس View است، می بینیم که ابتدا کلاس View نوشته شده و این متد به آن ضمیمه شده است:

    [​IMG]
    همانطور که در کد فوق با یک فلش قرمز رنگ مشخص شده است، کلاس View به برنامه ما Import شد. جایی که با یک دایره قرمز رنگ نشان داده شده است به منزله نقطه پایانی جایی است که متدهای مرتبط با کلاس Button در آن قرار گرفته و قرار است به محض کلیک شدن روی دکمه کاری انجام دهند. اگر به داخل دایره خوب توجه کنیم می بینیم که دور پرانتز نقطه چین قرار گرفته است و این نقطه چین حاکی از آن است که مشکلی در ارتباط با این متد وجود دارد. با قرار دادن نشانگر موس خود روی نقطه چین با تصویر زیر مواجه خواهیم شد:

    [​IMG]
    عبارتی که در باکس زرد رنگ وجود دارد حاکی از آن است که می بایست یک علامت ; در آن نقطه قرار داده تا دستور ما تکمیل شود. حال با قرار دادن یک علامت ; پس از پرانتز خواهیم دید که مشکل بر طرف خواهد شد:

    [​IMG]
    تا اینجای کار موفق شده ایم تا متدهای لازم برای عملکرد یک دکمه را وارد برنامه کنیم. در واقع اگر به کد فوق نگاهی بیندازیم خواهیم دید که دارای یک کامنت است. محل قرارگیری این کامنت جایی است که می بایست دستورات مد نظر خود را به منظور عملی شدن آنها نوشت. به عبارت دیگر متدی تحت عنوان onClick که از جنس void است به منزله جایگاهی است که قرار است دستورات ما را در مورد دکمه اجرا کند.

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


    package com.behzadmoradi.myprayercounter; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { /** Called when the activity is first created. */ int counter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); counter = 0; TextView tView = (TextView) findViewById(R.id.txt_textTwo); Button btn = (Button) findViewById(R.id.btn_buttonOne); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { counter++; } }); } }
    در واقع داخل متد onClick نام متغیر خود را نوشته و دو علامت به علاوه پس از آن قرار می دهیم و در نهایت یک علامت ; می نویسیم. این خط از کد یک واحد به مقدار متغیر counter اضافه می کند. به عنوان راه کار جایگزین می توانیم از دستور counter = couner +1; نیز استفاده کنیم (به منظور آشنایی با اعمال Operator ها به سری آموزش های برنامه نویسی جاوا در سایت نردبان آموزش هشتم مراجعه نمایید).

    در واقع پس از وارد کردن کلاس TextView به اپلیکیشن خود به کلیه متدهای این کلاس دسترسی خواهیم داشت. یکی از متدهایی که در این اپلیکیشن استفاده خواهیم کرد متد setText است که این وظیفه را دارا است تا متنی را به یک TextView اختصاص دهد. حال کد خود را به صورت زیر تکمیل می کنیم:

    [​IMG]
    همانطور که در تصویر فوق می بینیم ابتدا نام TextView خود را نوشته سپس یک نقطه قرار داده و متد setText را می نویسیم. اگر در تصویر فوق دقت کنیم می بینیم که دوره tView نقطه چین قرار گرفته است. برای اینکه ببینیم اکلیپس با چه مشکلی رو به رو شده است، نشانگر موس خود را روی tView قرار می دهیم:

    [​IMG]
    همانطور که در باکس زرد رنگ مشخص است، از آنجا که ما کلاس TextView خود را داخل کلاس تعریف نکرده بلکه داخل متد onCreate تعریف کرده ایم قابل دسترسی نیست. راه کاری که اکلیپس به ما پیشنهاد می دهد این است که tView را به final تبدیل کنیم. برای این منظور با نشانگر موس خود روی خط آبی رنگ کلیک کرده تا دستور final را عملی سازیم:

    [​IMG]
    همانطور که در تصویر فوق مشخص است کلید واژه final به کلاس TextView اضافه شده است. به طور خلاصه کاری که این کلید واژه final انجام می دهد این است که کلاس TextView را محدود کرده و از این پس امکان وارثت از این کلاس از بین خواهد رفت (به منظور آشنایی بیشتر با مفهوم final به سری آموزش های زبان برنامه نویسی جاوا در سایت نردبان آموزش چهل و نهم مراجعه نمایید). به عبارت دیگر با این کار این تضمین را به اندروید خواهیم داد که هیچ کلاسی را از روی این کلاس ایجاد نخواهیم کرد.

    چنانچه تمایل داشته باشیم که از کلید واژه final استفاده نکنیم می توانیم کلاس TextView خود را از داخل متد onCreate به داخل کلاس MainActivity انتقال دهیم که در این صورت دیگر نیازی به نوشتن کلید واژه final نیست:


    package com.behzadmoradi.myprayercounter; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { /** Called when the activity is first created. */ int counter; TextView tView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); counter = 0; tView = (TextView) findViewById(R.id.txt_textTwo); Button btn = (Button) findViewById(R.id.btn_buttonOne); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { counter++; tView.setText("" + counter); } }); } }
    همانطور که در تصویر فوق مشخص است کلاس TextView در کنار متغیر counter داخل کلاس MainActivity تعریف شده است سپس داخل متد onCreate مقداری را به آن اختصاص داده ایم.

    اگر به تصویر فوق خوب دقت کنیم می بینیم که متد setText نیز دارای مشکلی است و دور آن نقطه چین قرار گرفته است. در واقع علت آن است که داخل آن هیچ پارامتری قرار نداده ایم و به محض اینکه پارامتری برای آن در نظر بگیریم این مشکل برطرف خواهد شد.

    به طور خلاصه tView شیئی است که از روی کلاس TextView ساخته شده است. این کلاس نیز به یک TextView دیگر که در فایل XML تحت عنوان txt_textTwo ایجاد کردیم لینک شده است. متدی هم تحت عنوان setText که به tView ضمیمه شده است این وظیفه را دارا است تا هرآنچه که داخل پرانتز مقابل آن قرار گیرد را به txt_textTwo اختصاص دهد. حال از آنجا که می خواهیم با هر بار کلیک شدن روی دکمه یک واحد به متغیر counter اضافه شود پس می توانیم نتیجه بگیریم که با قرار دادن متغیر counter داخل پرانتز مرتبط با متد setText می توانیم به نتیجه مد نظر دست پیدا کنیم. اکنون کد خود را به صورت زیر تکیمل می کنیم:


    @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); counter = 0; final TextView tView = (TextView) findViewById(R.id.txt_textTwo); Button btn = (Button) findViewById(R.id.btn_buttonOne); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { counter++; tView.setText(counter); } }); }
    حال برنامه خود را اجرا می کنیم:

    [​IMG]
    با کلیک کردن روی دکمه به علاوه قصد داریم تا یک ذکر گفته شده را به شمارنده اضافه کنیم:

    [​IMG]
    به محض کلیک کردن می بینیم که اپلیکیشن اصطلاحاً Crash می کند. مسلماً مشکلی وجود دارد که از آن بی خبریم.

    در حقیقت بنده از یک نکته غفلت کرده و آن هم اینکه پارامتر مرتبط با متد setText حتماً می بایست چیزی از جنس یک string یا نوشته باشد که در غیر اینصورت عملکرد این متد با مشکل مواجه خواهد شد. برای رفع این مشکل می توانیم یا متنی را همچون "ذکر شمار" به پارامتر داخل پرانتز اضافه نموده و یا صرفاً یک علامت " " به متغیر counter اضافه کنیم که در این آموزش راه کار دوم را مد نظر قرار خواهیم داد:


    @Override public void onClick(View v) { counter++; tView.setText(""+counter); }
    به عنوان یک قانون کلی همواره بایستی این نکته را مد نظر داشته باشیم که هرگاه چیزی از جنس یک string یا متن را به دیگر متغیرها مثلا یک int یا به عبارتی یک عدد صحیح اضافه کنیم جمع هر دوی آنها یک string یا متن خواهد بود. اکنون با دانستن این نکته که پارامتر مرتبط با متد setText می بایست یک string باشد به سادگی می توانیم دو علامت " " داخل پرانتز نوشته و یک علامت به علاوه پس آنها قرار داده و در نهایت نام متغیر خود را بنویسیم که با اینکار متد setText فکر خواهد کرد که داخل گیومه ها متنی وجود دارد که این مسئله هم می تواند درست باشد و هم نادرست. از دید اندروید درست است چرا که وجود این دو علامت را به عنوان یک متن تلقی خواهد کرد اما از دید ما نادرست است چرا که چیزی داخل گیومه ها نوشته نشده است. به هر حال این راه کاری است که از آن طریق می توان مشکل خود را حل کنیم. اکنون مجدد اپلیکیشن خود را اجرا می کنیم:

    [​IMG]
    همانطور که در تصویر فوق مشاهده می کنیم، با هفت بار ذکر گفتن هفت واحد به شمارنده اضافه شده است.

    پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
    1. چند راه برای افزودن یک واحد به متغیر counter وجود دارد؟
    2. چرا کلاس TextView را بایستی final کرد؟
    3. راه کاری که به منظور ننوشتن کلید واژه final است چیست؟
    4. چرا اگر هیچ گونه string یی به عنوان پارامتر برای متد setText در نظر گرفته نشود اپلیکیشن ما به درستی کار نخواهد کرد؟
     
    یک شخص از این تشکر کرد.
  4. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش برنامه نویسی اندروید

    [​IMG] برنامه نویسی

    [h=1]آموزش برنامه نویسی اندروید - قسمت ۴۴: نحوه به روز رسانی متن داخل یک TextView[/h]
    اهداف آموزشی این قسمت عبارتند از:
    1. نحوه به روز رسانی اطلاعات یک TextView در اندروید

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

    همانطور که در آموزش هشتم توضیح داده شد اقدام به ساخت یک پروژه جدید اپلیکیشن اندرویدی در محیط اکلیپس می نماییم و نام آنرا Updating A View می گذاریم (لازم به ذکر است که در حین ساخت این پروژه برای Activity خود یا همان فایل جاوای اپلیکیشن هر نامی را می توانیم در نظر بگیریم اما نامی که در این آموزش در نظر خواهیم گرفت MainActivity خواهد بود. در واقع چنانچه تمایل دارید هم گام با این آموزش پیش روید پیشنهاد می شود نامی مشابه برای Activity اپلیکیشن خود در نظر بگیرید).

    پس از ساخت پروژه و باز کردن فایل main.xml رابط گرافیک کاربر ما به شکل زیر خواهد بود:

    [​IMG]
    همانطور که می بینیم یک TextView به صورت خودکار توسط اکلیپس ایجاد شده و حاوی عبارت Hello World, MainActivity می باشد. اولین کاری می بایست انجام دهیم این است که برای این TextView یک id در نظر بگیریم. برای این منظور سه راه کار وجود دارد که یکی از طریق کلیک روی Tab مربوط به main.xml و اختصاص id به صورت دستی است و دیگری از طریق پنجره Properties است به این صورت که اول روی این TextView کلیک کرده سپس به پنجره Properties رجوع می کنیم و Value مرتبط با Id را تغییر می دهیم و در نهایت با راست کلیک کردن روی این TextView انتخاب گزینه Edit ID می باشد (کلیه روش های فوق در آموزش های پیشین به تفصیل مورد بررسی قرار گرفته اند. همچنین برای آشنایی با نحوه صحیح اختصاص id به آموزش های گذشته رجوع نمایید).

    برای این TextView یک id تحت عنوان txt_TextOne در نظر می گیریم. حال قصد داریم تا سه دکمه تحت عناوین Narenji ، Nardebaan و Negahbaan روی UI قرار دهیم که کاربر با کلیک روی هر کدام از آنها بتواند آدرس وب سایت مرتبط را مشاهده نماید. اما پیش از این برای اینکه تمرینی از آموزش های گذشته داشته باشیم از یک سو و نیز اینکه رابط گرافیکی ما تا حدودی جذاب تر به نظر برسد از سوی دیگر قصد داریم تا رنگ Layout خود را به رنگی دلخواه تغییر داده و همچنین اندازه فونت و هم رنگ TextView خود را تغییر می دهیم تا بهتر روی رابط گرافیکی نمایان شود. پس از اجرای اپلیکیشن خود در این مرحله در Emulator با تصویر زیر مواجه خواهیم شد:

    [​IMG]
    به طور خلاصه می توان گفت که برای تغییر رنگ UI می بایست یک بار روی خود UI کلیک کرده و در پنجره Properties اقدام به تغییر Value مرتبط با Background نماییم. رنگ در نظر گرفته شده در تصویر فوق #ffde57 می باشد. به منظور تغییر مقادیر TextView هم به همین ترتیب اقدام خواهیم کرد به این صورت که پس از کلیک روی آن، Value های مرتبط با Text size و Text color را تغییر می دهیم. رنگ در نظر گرفته شده برای این متن مشکی بوده و اندازه آن 30dip است.

    حال می بایست سه دکمه روی رابط گرافیکی ایجاد کنیم تحت عناوین Narenji ، Nardebaan و Negahbaan و به منظور لینک دادن به آنها در Activity خود نیاز است برای هر کدام از آنها یک id نیز در نظر بگیریم. برای هر کدام از آنها به ترتیب btn_narenjiButton و btn_nardebaanButton و btn_negahbaanButton را در نظر می گیریم و در ضمن نام هر یک از دکمه ها را نیز نامی مرتبط با id آنها انتخاب می کنیم:

    [​IMG]
    اگر به تصویر فوق خوب دقت کنیم می بینیم که متن داخل TextView ما به خط بعد انتقال داده شده است اما این در حالی است که پس از اجرای این اپلیکیشن در Emulator کل متن در یک خط نمایش داده می شود. در واقع علت این مسئله این است که همانطور که در تصویر فوق مشخص است نمایش UI این اپلیکیشن در محیط اکلیپس روی یک دستگاه 3.7 اینچی است اما این در حالی است که دستگاه مجازی که بنده ساخته ام یک تبلت است:

    [​IMG]
    همانطور که در تصویر فوق مشخص است با انتخاب یک دستگاه بزرگ تر این مشکل داخل اکلیپس هم رفع خواهد شد (لازم به ذکر است که این تغییر نمایش رابط گرافیک کاربر در محیط اکلیپس هیچ گونه ارتباطی با ابعاد واقعی رابط گرافیکی اپلیکیشن نداشته و صرفاً جهت نمایش در محیط اکلیپس می باشد):

    [​IMG]
    در این مرحله از آموزش کار ما در ارتباط به فایل main.xml به پایان رسیده وحال نوبت به برنامه نویسی در فایل MainActivity.java می رسد. برای این منظور این فایل را باز می کنیم.



    • package com.behzadmoradi.updatingaview;
    • import android.app.Activity;
    • import android.os.Bundle;
    • 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);
    • }
    • }

    همانطور که در آموزش اپلیکیشن ذکر شمار توضیح داده شد، نیاز است تا یک شیئ از روی کلاس TextView اندروید ساخته و آن را به تنها TextView موجود روی رابط گرافیکی لینک داده، سپس سه شیئ از روی کلاس Button اندروید ساخته و آنها را به سه دکمه موجود روی رابط گرافیک لینک دهیم (در واقع علت اینکه به جای گفتن کلاس TextView می گوییم کلاس TextView اندروید این است که این کلاس فقط در SDK اندروید است و در یک پروژه جاوا چنین کلاسی اصلاً وجود خارجی نخواهد داشت. به عبارت دیگر درست است که از زبان جاوا برای توسعه اپلیکیشن خود استفاده می کنیم اما این در حالی است که برخی کلاس های مورد استفاده فقط مخصوص اندروید بوده و به کلاس های اختصاصی جاوا اضافه شده اند).

    اکنون طبق آموزش های گذشته این کلاس ها را وارد Activity خود کرده و کد ما پس از تکمیل به صورت زیر خواهد بود:



    • package com.behzadmoradi.updatingaview;
    • import android.app.Activity;
    • import android.os.Bundle;
    • import android.view.View;
    • import android.widget.Button;
    • 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);
    • // کلاس مربوط به متن
    • TextView tv = (TextView) findViewById(R.id.txt_textOne);
    • // کلاس مربوط به دکمه نارنجی
    • Button orangeButton = (Button) findViewById(R.id.btn_narenjiButton);
    • orangeButton.setOnClickListener(new View.OnClickListener() {
    • @Override
    • public void onClick(View v) {
    • // TODO Auto-generated method stub
    • }
    • });
    • // کلاس مربوط به دکمه نردبان
    • Button ladderButton = (Button) findViewById(R.id.btn_nardebaanButton);
    • ladderButton.setOnClickListener(new View.OnClickListener() {
    • @Override
    • public void onClick(View v) {
    • // TODO Auto-generated method stub
    • }
    • });
    • // کلاس مربوط به دکمه نگهبان
    • Button guardButton = (Button) findViewById(R.id.btn_negahbaanButton);
    • guardButton.setOnClickListener(new View.OnClickListener() {
    • @Override
    • public void onClick(View v) {
    • // TODO Auto-generated method stub
    • }
    • });
    • }
    • }

    در کد فوق برای مشخص سازی بخش های مختلف از کامنت های فارسی استفاده شده است (به منظور استفاده از کامنت های فارسی فقط به خاطر داشته باشیم که پس از وارد کردن کامنت فارسی به کد زمانیکه بخواهیم فایل خود را Save کنیم پنجره ای باز خواهد شد که در آن پنجره حتماً می بایست گزینه Save as UTF-8 را کلیک نماییم).

    همانطور که در کد فوق مشخص است ابتدا یک شیئ تحت عنوان tv از روی کلاس TextView اندروید ساخته ایم و آن را به متنی که روی رابط گرافیک قرار دارد لینک داده ایم. سپس دکمه ای تحت عنوان orangeButton به معنی "دکمه نارنجی" ساخته ایم و آن را به دکمه ای لینک داده ایم که عنوان آن Narenji است. دکمه دومی که ایجاد کرده ایم ladderButton به معنی "دکمه نردبان" است و آن را هم به دکمه ای لینک داده ایم که عنوان آن Nardebaan است. در نهایت دکمه دیگری تحت عنوان guardButton به معنی "دکمه نگهبان" ساخته ایم که آنرا به دکمه Negahbaan ارتباط داده ایم.

    اکنون تنها کاری که می بایست انجام دهیم این است که داخل متد onClick هر یک از دکمه ها آدرس وب سایت مرتبط را وارد کنیم تا به محض کلیک روی آن دکمه آدرس مرتبط به نمایش در آید. برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

    [​IMG]
    همانطور که در تصویر فوق مشخص است ابتدا نام شیئی که از روی کلاس TextView اندروید را ساختیم نوشته سپس از متد setText استفاده کرده و هر آنچه که می خواهیم داخل این متد قرار دهیم را مابین دو گیومه می نویسیم و در نهایت یک علامت ; قرار می دهیم. همانطور که در تصویر فوق مشخص شده است دور نام tv که نام شیئی است که برای کلاس TextView در نظر گرفته ایم نقطه چین قرار گرفته است. حال اگر نشانگر موس خود را روی آن قرار دهیم باکسی زرد رنگ نمایان خواهد شد که حاکی از آن است که نمی توانیم به یک شیئ غیر final که داخل متد قرار گرفته است دسترسی داشته باشیم. برای رفع این مشکل اکلیپس به ما پیشنهاد می دهد که کلاس TextView خود را به final تبدیل کنیم. حال با رفع این مشکل می توانیم دو دکمه دیگر را نیز تکمیل کرده و کد نهایی ما به صورت زیر خواهد بود:



    • package com.behzadmoradi.updatingaview;
    • import android.app.Activity;
    • import android.os.Bundle;
    • import android.view.View;
    • import android.widget.Button;
    • 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);
    • // کلاس مربوط به متن
    • final TextView tv = (TextView) findViewById(R.id.txt_textOne);
    • // کلاس مربوط به دکمه نارنجی
    • Button orangeButton = (Button) findViewById(R.id.btn_narenjiButton);
    • orangeButton.setOnClickListener(new View.OnClickListener() {
    • @Override
    • public void onClick(View v) {
    • // TODO Auto-generated method stub
    • tv.setText("www.narenji.ir");
    • }
    • });
    • // کلاس مربوط به دکمه نردبان
    • Button ladderButton = (Button) findViewById(R.id.btn_nardebaanButton);
    • ladderButton.setOnClickListener(new View.OnClickListener() {
    • @Override
    • public void onClick(View v) {
    • // TODO Auto-generated method stub
    • tv.setText("www.nardebaan.ir");
    • }
    • });
    • // کلاس مربوط به دکمه نگهبان
    • Button guardButton = (Button) findViewById(R.id.btn_negahbaanButton);
    • guardButton.setOnClickListener(new View.OnClickListener() {
    • @Override
    • public void onClick(View v) {
    • // TODO Auto-generated method stub
    • tv.setText("www.negahbaan.ir");
    • }
    • });
    • }
    • }

    همانطور که مشخص است کلید واژه final پیش از نام کلاس TextView اضافه شده و مابقی دکمه ها نیز تکمیل شده اند. حال برنامه خود را اجرا می کنیم:

    [​IMG]
    می بینیم که با کلیک روی دکمه Nardebaan متن اولیه TextView به آدرس سایت نردبان آپدیت می شود.

    پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
    1. آیا تغییر حالت نمایش رابط کاربر در محیط اکلیپس تغییری در رابط کاربر ایجاد می کند یا خیر؟
    2. به چه شکل می توان دستگاه هایی با ابعداد مختلف را در خود محیط اکلیپس تست کرد؟
    3. چرا می بایست کلاس TextView که در Activity اپلیکیشن یا همان فایل جاوا قرار دارد را final کرد؟
    4. آیا اگر یک شیئ از روی کلاس Button اندروید بسازیم می توانیم از همان شیئ برای دکمه های مختلف استفاده کنیم یا خیر؟
     
    یک شخص از این تشکر کرد.
  5. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش برنامه نویسی اندروید

    [​IMG] برنامه نویسی

    [h=1]آموزش برنامه نویسی اندروید - قسمت ۴۵: نحوه گرفتن اطلاعات از یک EditText (بخش اول)[/h]
    اهداف آموزشی این قسمت عبارتند از:
    1. معرفی EditText
    2. تنظیمات مرتبط با EditText

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

    در ابتدا نیاز است تا یک پروژه جدید تحت عنوان Getting User Input به معنی "دریافت اطلاعات ورودی کاربر" ایجاد می کنیم. سپس فایل main.xml که در زیرشاخه فولدر layout قرار دارد را باز می نماییم:

    [​IMG]
    همانطور که مشخص است طبق روال گذشته اکلیپس یک TextView به صورت خودکار حاوی عبارت Hello World, به علاوه نامی که برای Activity یی که برای اپلیکیشن خود انتخاب می کنیم که در این مثال MainActivity است ایجاد می کند. اکنون همانطور که در تصویر فوق مشخص است می بایست روی Tab مربوط به Text Fields کلیک کرده تا به کلیه EditText های موجود در اندروید دست پیدا کنیم:

    [​IMG]
    همانطور که در تصویر فوق مشخص است پس از کلیک کردن روی Tab مربوط به Text Fields برخی از گزینه ها قابل مشاهده هستند اما این در حالی است که تعداد گزینه های دیگری نیز وجود دارند اما هیچ اسکرولی برای دیدن مابقی موارد در این لیست دیده نمی شود. در حقیقت علت پنهان بودن این اسکرول این است که پنجره مربوط به UI فضای زیادی را اشغال کرده است و همین مسئله سبب شده که اسکرول پنجره Text Fields پنهان شود. برای رفع این مشکل مطابق تصویر زیر عمل خواهیم کرد:

    [​IMG]
    همانطور که در تصویر فوق مشخص است، پس از قرار دادن نشانگر موس خود روی خطی که به صورت عمودی پنجره مربوط به UI را از پنجره مربوط به Widget ها مجزا می سازد، نشانگر موس به یک فلش سفید رنگ دو طرفه مبدل خواهد شد. حال با پایین نگه داشتن دکمه سمت چپ موس خط افقی را گرفته و کمی به سمت راست می کشیم و سپس دکمه موس خود را رها می کنیم. حال با وضعیت زیر مواجه خواهیم شد:

    [​IMG]
    همانطور که می بینیم اسکرول مربوط به پنجره Widget ها نمایان می شود. حال از این لیست گزینه ای تحت عنوان Plain Text را پیدا نموده و آن را به صورت Drag and Drop روی رابط کاربری قرار می دهیم:

    [​IMG]
    به طور خلاصه می توان گفت که واژه انگلیسی Plain به معنی "ساده" است. در واقع با به کارگیری از این نوع EditText می توانیم این امکان را به کاربر بدهیم تا هر چیزی که تمایل داشت را وارد دستگاه خود نماید. در صورتیکه به لیست زیرشاخه Text Fields نگاه کنیم خواهیم دید که دارای گزینه های بسیاری است. به طور مثال اگر از گزینه Date استفاده کنیم این امکان را به کاربر خواهیم داد تا فقط بتواند تاریخ را وارد دستگاه کند و یا اگر از Number استفاده کنیم کاربر به هیچ وجه نخواهد توانست چیزی به جزء عدد وارد EditText نماید (در آموزش های آتی بسته به نیاز اپلیکیشن از گزینه های مناسب استفاده خواهیم کرد).

    پس از قرار دادن یک EditText روی UI همانطور که قبلاً آموزش داده شد یک دکمه نیز روی UI قرار می دهیم:

    [​IMG]
    در ادامه نیاز است تا برای هر یک از این سه View یک id در نظر بگیریم. برای این منظور از آنجا که در این اپلیکیش از هر نوع View فقط یک عدد موجود است پس نیازی به بکارگیری از پیشوند در id ها نیست و صرفاً برای TextView نام text را به عنوان id در نظر می گیریم، برای دکمه id یی تحت عنوان button را در نظر می گیریم و برای EditText نام input را به عنوان id در نظر می گیریم.

    اکنون به نظر می رسد بتوانیم خصوصیات هر یک از سه View یی که روی رابط گرافیکی کاربر قرار گرفته است را اصطلاحاً Customize کنیم اما از آنجا که این مسئله منجر به تکرار مکررات خواهد شد از اینکار خودداری کرده و صرفاً برخی تنظیمات مربوط به EditText را کانون توجه قرار می دهیم. حال پس از کلیک کردن روی EditText به پنجره Properties رجوع می کنیم:

    [​IMG]
    یکی از متدهای بسیار کاربردی در ارتباط با EditText ها متد Hint است. معنی لغوی این واژه "ایما و اشاره" است. در واقع اگر توجه کرده باشیم در برخی از اپلیکیشن ها جایی که می بایست اطلاعاتی را وارد کنیم در Field مربوطه به رنگ مثلاً خاکستری کم رنگ نوشته شده است که مثلاً "نام خود را وارد کنید:" و به محض اینکه روی آن EditText کلیک می کنیم متن کم رنگ از بین رفته و می توانیم نام خود را وارد کرده و نام ما جایگزین متن قبلی خواهد شد. چنین عملکردی اصطلاحاً Hint نام دارد. به عبارت دیگر به کاربر می فهمانیم که در هر Field یی چه اطلاعاتی را می بایست وارد کند. برای EditText این اپلیکیشن عبارت Please enter your text را به معنی "لطفاً متن خود را وارد کنید" به عنوان Hint در نظر می گیریم. حال با بازگشتن به UI خواهیم دید که این Hint ایجاد شده است:

    [​IMG]
    اکنون می بایست به فایل جاوای اپلیکیشن رجوع کرده و بخش برنامه نویسی اپلیکیشن را به اتمام برسانیم اما پیش از شروع اینکار نیاز است تا مسئله ای را مد نظر قرار دهیم. در واقع در پروژه اپلیکیشن ذکر شمار نحوه به کار گیری از کلاس Button و همچنین TextView به این صورت بود که آنها را داخل متد onCreate تعریف کردیم. در این پروژه قصد داریم تا روش دیگری را نیز مورد بررسی قرار دهیم که به نظر می رسد نسبت به روش اولی که در پروژه ذکر شمار مورد استفاده قرار دادیم از معماری برنامه نویسی بهتری برخوردار است. به عبارت دیگر در این آموزش قصد نداریم تا چیز جدیدی در ارتباط با کلاس های Button و TextView فرا بگیریم بلکه مقصود نحوه نوشتن و همچنین جایگاه این کلاس ها در Activity است که در آموزش آینده به تفصیل مورد بررسی قرار خواهیم داد.

    پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
    1. علت وجود EditText های متفاوتی مثلاً برای تاریخ، عدد، ایمیل و غیره چیست؟
    2. هدف از به کار گیری Hint در Field هایی که کاربر می بایست چیزی را وارد نماید چیست؟
    3. به چه شکل می توان یک Hint برای EditText یی در اندروید در نظر گرفت؟
     
    یک شخص از این تشکر کرد.