آموزش برنامه نویسی اندروید (بخش چهل و چهارم: کار با OnLongClick در اندروید)

استاندارد

با ClickListener در بخش های ابتدایی آشنا شدیم. نحوه کار با آن با Button ها را در جلسه یازدهم آموختیم.

کار ClickListener اینست که قابلیتی به ابزارها مثلا دکمه Button می دهد که همواره به کلیک کردن کاربر گوش کنند.

در هنگام کلیک بر روی آن ابزار وارد رویدادی که در برنامه نویسی تعریف کرده ایم می شویم.

سپس کدهای مربوط به آن رویداد اجرا شده تا فعالیت های مورد نظری که می خواهیم انجام شوند.

در این بخش می خواهیم در مورد OnLongClickListener صحبت کنیم.

ولی OnLongClickListener چیست؟

با دقت به کلمه Long می توان حدس هایی زد. در واقع در این جا باید دکمه و یا به طور کلی ابزار ما که با OnLongClickListener تعریف شده است، را برای مدتی نگه (Hold) داشت تا رویداد مورد نظر فعال شود.

پس فقط با یک بار زدن بر روی آن ابزار، اتفاق خاصی نمیوفتد.

در ادامه با ما همراه باشید تا نحوه کار با OnLongClick را با استفاده از پروژه ای بیاموزید.

من یک پروژه به نام OnLongClick-GSM ایجاد می کنم.

سپس به قسمت لایه اپلیکیشن (activity_main.xml) و ابزار اندروید استودیو (Palette) می روم. و یک Button بر روی لایه اضافه می کنم.

در مرحله بعد به قسمت کد جاوای برنامه (MainActivity) می روم تا کدهای مورد نظر را بنویسم.

دقت داشته باشید که این مرحله بسیار شبیه به همان ClickListener معمولی ست.

در داخل متد ()onCreate ابتدا دکمه ی Button را که در لایه اپلیکیشن اضافه کرده بودم را در قسمت جاوا نیز تعریف می کنم.

Button BTN = (Button) findViewById(R.id.button);

حال رویدادی به صورت OnLongClickListener برای دکمه Button تعریف می کنم.

BTN.setOnLongClickListener(new Button.OnLongClickListener(){

// کدهای این رویداد
   });

می توانیم برای تست عملکرد OnLongClickListener کدهای زیر را در داخل این رویداد بنویسیم:

@Override
            public boolean onLongClick(View arg0) {
                Toast.makeText(MainActivity.this, "کلیک انجام شد", Toast.LENGTH_SHORT).show();
                return false;
            }

کل کدهای که در متد ()onCreate ایجاد کردیم را می توانید در زیر مشاهده کنید :

Button BTN = (Button) findViewById(R.id.button);
        BTN.setOnLongClickListener(new Button.OnLongClickListener(){

            @Override
            public boolean onLongClick(View arg0) {
                Toast.makeText(MainActivity.this, "کلیک انجام شد", Toast.LENGTH_SHORT).show();
                return false;
            }

        });

کد کلاس MainActivity.java به همراه کلاس ها و کتابخانه های import شده:

package com.gsm_developers.onlongclick_gsm;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button BTN = (Button) findViewById(R.id.button);
        BTN.setOnLongClickListener(new Button.OnLongClickListener(){

            @Override
            public boolean onLongClick(View arg0) {
                Toast.makeText(MainActivity.this, "کلیک انجام شد", Toast.LENGTH_SHORT).show();
                return false;
            }

        });
    }
}

کار تمام است.

این اپلیکیشن را اجرا می کنیم.

هنگامی که اپلیکیشن اجرا می شود، اگر بر روی Button کلیک کنیم اتفاقی نمی افتد. ولی اگر به مدت دو ثانیه Button را نگه داریم، خروجی زیر را در این اپلیکیشن مشاهده می کنید:

آموزش برنامه نویسی اندروید با اندروید استودیو (بخش یازدهم: کار با دکمه ها در اندروید استودیو)

استاندارد

امروز در مورد دکمه ها (Buttonها) و کار با دکمه ها در اندروید استادیو صحبت می کنیم. از مهم ترین عناصر در طراحی رابط کاربری برنامه های هر پلتفرمی، Buttonها هستند.

در این آموزش قصد داریم نحوه اضافه کردن یک دکمه به برنامه، و همچنین استفاده از آن را آموزش دهیم.

ابتدا از قسمت سمت چپ، به سراغ پوشه ی Res رفته و پس از باز کردن آن پوشه ی Layout را نیز باز می کنیم. حال فایل Activity_Main.xml را انتخاب نموده تا در قسمت سمت راست پنجره ای مانند عکس زیر باز شود. (قسمت های مهم در عکس با قرمز مشخص شده است)

android-studio-beginners-gsm-developers-33

از قسمت سمت چپ پوسته رابط کاربری، یعنی Palette، می توان Widgetها را مشاهده نمود. Palette در فرهنگ لغت به معنی جعبه رنگ آمیزی است.

در برنامه نویسی اندروید از این به بعد با Palette ها خیلی کار خواهیم داشت پس حتما به این قسمت دقت کنید.

android-studio-beginners-gsm-developers-34

 

از Widgetها می توان یک Button را انتخاب کرده و به صورت Drag & Drop به داخل لایه برنامه کشید.

در قسمت Design از فایل Layout، کدهایی را مشاهده می کنید که با تگ RelativeLayout شروع شده اند. (می توانید در عکس پایین نیز، این موضوع را مشاهده نمایید)

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

به عنوان مثال اگر بخواهیم از چندین دکمه در برنامه خود استفاده کنیم، به طوری که دکمه ها (Buttonها) به شکل مناسبی کنار هم، بالا و یا پایین قرار بگیرند. RelativeLayout به ما این امکان رو میدهد که به راحتی در قسمت Graphic Layout دکمه های خود را قرار بدیم در حالی که برای این کار نیاز به کدنویسی نباشد.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    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="com.gsm_developers.gsm_button_android.MainActivity"> ........... </RelativeLayout>

اگر از قسمت Design به قسمت Text برویم ( در پایین عکس با قرمز مشخص شده است)، می بینیم که کدهای پشت صحنه ای برای دکمه (Button) اضافه شده است. این کدها در واقع خصوصیاتی مانند نوع Palette، که با تگ Button مشخص شده است، و همچنین نوشته ی داخل آن و عرض و ارتفاع و حاشیه و آی دی دکمه ما در داخل تگ Button  مشخص شده است.

 

android-studio-beginners-gsm-developers-35

 

در داخل تگ Button، کد android:id قرار دارد که وظیفه این کد، معرفی کردن یک شناسه به دکمه است، که در هنگام نوشتن یک رویداد برای دکمه مد نظر اختلالی در کارکرد دکمه ها و یا اجزای دیگر لایه به وجود نیاید.

<Button
        android:text="Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="129dp"
        android:id="@+id/button"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true" />

خاصیت android:layout_width عرض دکمه ها را در لایه مشخص می کند. می دانیم که اجزای گرافیکی دارای عرض و طول هستند.

همان طور که ملاحظه می کنید، در اینجا این مقدار، “wrap_content” است. حال این سوال پیش می آید که این مقدار چه چیزی را به عنوان عرض اعلام می کند؟

در واقع با این مقدار، عرض و طول دکمه را با توجه به طول متنی که داخل آن نوشته می شود، تغییر داد.

به جای این مقدار می توان از “fill_parent” و “match_parent” نیز استفاده نمود. “fill_parent” عرض یا طول دکمه را به اندازه ی عرض یا طول برنامه تغییر می دهد.

خاصیت android:text در این قسمت نام دکمه را معرفی می کند، که می توان آن را به نامی که دوست داریم تغییر دهیم.

سوال: نرم افزار اندرویدی که می نویسیم از کجا شروع می شود و به این لایه های گرافیکی می رسد؟

اگر طبق تصویر زیر به کد جاوای برنامه اندرویدی خود نگاه کنید، مشاهده می کنید که یک تابع Set.ContentView با آرگومان ورودی R.layout.activity_main وجود دارد. این تابع به منبع جاوای ما می گوید که اجزای سازنده رابط کاربری مانند دکمه ها (Button) در این قسمت وجود دارند.

android-studio-beginners-gsm-developers-36

پدیدار شدن متن با زدن یک دکمه Button

اولین کاری که در این رابطه انجام می دهیم، باید دکمه (Button) را به کد جاوا اضافه نماییم.

می توانید کد هایی که در زیر آورده شده است را برای انجام این کار، به پروژه خود اضافه نمایید.

نکته: این کد، کد کامل MainActivity می باشد که بر اساس آی دی های دکمه و نوشته ای که تا به اینجا و در تصاویر دیده اید ایجاد شده است. اگر آیدی دکمه و یا نوشته شما و یا حتی نام پکیج شما، فرق می کند باید آن را در کد خود، در نظر بگیرید.

//نام پکیج
package com.gsm_developers.gsm_button_android;

//افزودن کتابخانه های مورد نیاز
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

//شروع کلاس اصلی جاوا در اپلیکیشن ما
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
// معرفی نوشته و محل قرارگیری آن از لایه
        final TextView textView=(TextView)findViewById(R.id.textView);
//معرفی دکمه و محل قرار گیری آن از لایه
        final Button button1 =  (Button)findViewById(R.id.button);

        //Implement listener for your button so that when you click the
        //button, android will listen to it.
//این دستور در هنگام کلیک کردن بر روی دکمه اجرا می شود و هر کدی را که بنویسیم اجرا می کند
        button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // نمایش پیام دلخواه خودتان
                textView.setText("سلام، به آموزش اندروید استودیو سایت جی اس ام دولوپرز خوش آمدید");

            }   
        });
    }
}

نتیجه خروجی را می توانید در تصویر زیر مشاهده نمایید.

android-studio-beginners-gsm-developers-37