کار با Toastها در اندروید

ما خیلی زیاد در کارهای روزمره ای که با یه دیوایس اندرویدی انجام می دیم با Toastها رو به رو میشیم. Toastها باکس های معمولا با پسزمینه مشکی و نوشته سفید در پایین صفحه هستن که یه پیغامی رو نشون می دن و بعد خود به خود محو میشن و از بین میرن.

خیلی وقته که می خوام آموزش برنامه نویسی اندروید روی وبلاگ آکام منتشر کنم و امروز این کار رو با آموزش کار با Toastها در اندروید شروع خواهم کرد و برنامه ای که نهایتا ایجاد خواهد شد شامل سه دکمه خواهد بود که با کلیک روی هر کدوم از اونها یک Toast خاص نمایش داده خواهد شد.

اولین مورد یک Toast ساده و پیشفرض خود اندروید هست. در دومین مورد Toast پیشفرض اندروید رو کمی شخصی سازی خواهیم کرد و در قدم سوم یک Toast ایجاد خواهیم کرد که Layout اون کاملا از خودمون هست و می تونیم به دلخواه اون رو درست کنیم.

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

خب دیگه مقدمه کافیه بریم سروقت آموزش اصلی.

Toast ساده

همونطور که در بالا هم بهش اشاره کردم توصیه می کنم اول برید و نگاهی به لینک های رفرنس های توسعه دهندگان اندروید بندازید که کمک زیادی به این خواهد کرد که درک کنید در یک خط کد زیر که یک Toast ساده اندروید رو ایجاد می کنه چطور کار میکنه.

کلاس Toast یه متد استاتیک داره به اسم makeText() که Toast رو ایجاد می کنه ولی نشونش نمی ده ولی در نهایت با کمک متد show() میشه اون رو نشونش داد.

اما گفتم متد makeText(). این متد سه تا آرگومان داره. اولین یه Context هست و دومین آرگومان متنی هست که قراره نشون داده بشه که می تونه مستقیم و با یک String بهش دید و یا از فایل string.xml اون رو فراخونی کنید. آخرین آرگومانی که می مونه مدت زمانی هست که قرار هست Toast نشون داده بشه. این مدت به صورت پیشفرض یا کوتاه هست و یا بلند که خودتون اون رو تعین می کنید و در نمونه کد زیر قرار هست که Toast ما مدت زمان بیشتری نشون داده بشه.

نگاهی به کد زیر و خروجی که در ادامه بندازید.

Toast.makeText(this, "سلام من یک Toast ساده هستم", Toast.LENGTH_SHORT).show();

در صورتی که کد بالا رو اجرا کنید خروجی درست مثل تصویر زیر رو خواهد دید.

نمونه یک Toast ساده در اندروید

Toast شخصی سازی شده

Toast پیشفرض خود اندروید یه Layout داره که حاوی یک TextView هست. حالا اگه ما این Layout و TextView داخل اون رو بگیریم می تونیم مثل ویجت های معمولی باهاشون برخورد کنیم. مثلا می تونیم پسزمینه و رنگ متن اون رو تغییر بدیم و یا می تونیم فونت Toast رو تغییر بدیم، می تونیم اندازه و محل نمایش اون رو هم تغییر بدیم. همه اینها بستگی به سلیقه شما داره که توصیه می کنیم زیاد هم تغییرش ندید تا حالت استاندارد اون حفظ بشه.

به مثال زیر که ما در اون فقط فونت رو به وزیر تغییر دادیم توجه کنید و اون رو با Toast بالا که یه Toast ساده است مقایسه کنید.

Toast toast = Toast.makeText(this, "سلام من هم یک Toast شخصی سازی شده هستم", Toast.LENGTH_LONG);

// toast layout
LinearLayout toast_layout = (LinearLayout) toast.getView();

// toast message
TextView toast_text = (TextView) toast_layout.getChildAt(0);
toast_text.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/Vazir.ttf"));
toast_text.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

toast.show();

خروجی کد های بالا تصویری خواهد بود مثل چیزی که در زیر می بینید.

Toast پیشفرض اندروید که شخصی سازی شده و به عنوان مثال فونت آن تغییر کرده است

Toast با Layout شخصی

اولین توصیه من قبل از شروع قسمت سوم اینه که اصلا یه همچین Toastـی رو در برنامه های تون استفاده نکنید. این نوع Toast توصیه نمی شه و خب اگه به هر دلیلی نهایتا مجبور به استفاده شدید سعی کنید اون رو ساده نگه دارید و حالت های عجیب و غریبی رو براش استفاده نکنید.

در اولین قدم یه رنگ در فایل colors.xml تعریف می کنیم و بعدا اون رو به عنوان پسزمینه Toast استفاده خواهیم کرد.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>

    <color name="toast_background">#BF000000</color>
</resources>

اگه یادتون باشه گفتیم که توی Toast این مدلی فایل Layout رو خودمون ایجاد می کنیم. خب برای این کار من یه فایل Layout ایجاد می کنم و اسمش رو custom_layout_for_toast.xml می زارم و از یه ImageView و یه TextView برای نمایش محتوای استفاده می کنم (اصلا از این جور کارها نکنید).

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/toast_background"
    android:orientation="vertical"
    android:padding="16dp">

    <ImageView
        android:id="@+id/toast_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/toast_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="4dp"
        android:textColor="@android:color/white" />

</LinearLayout>

حالا کافیه من Layout ـی که ایجاد کردم رو به عنوان View به Toast معرفی کنم تا دیگه اون رو نشون بده.

View toast_view = LayoutInflater.from(this)
                .inflate(R.layout.custom_layout_for_toast, null);

ImageView toast_image = toast_view.findViewById(R.id.toast_image);

TextView toast_text = toast_view.findViewById(R.id.toast_text);
toast_text.setText("سلام من یک Toast با Layout شخصی هستم");
toast_text.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/Vazir.ttf"));

Toast toast = new Toast(this);
toast.setView(toast_view);
toast.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM, 0, 64);
toast.setDuration(Toast.LENGTH_LONG);
toast.show();

اگر سه تا قدم قبلی رو مثل من انجام داده باشید نهایتا خروجی شما هم چیزی خواهد بود مثل تصویر پایین.

نمونه یک Toast که Layout را خودمان ایجاد کرده ایم

خب دیگه همین بود.

منتشر شده توسط آکام محبی

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

دیدگاه خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

2 × 4 =