Bazen sadece bir yazı ile oluşturulan toast mesajları yetersiz kalır. Bu yüzden toast mesajını tasarlamak isteyebiliriz. Şartlara göre farklı görünümler kazansın isteyebiliriz. Bu yazıda custom(özelleşmiş) toast mesajı yapmayı göreceğiz. Daha iyi anlamanın en iyi yolu bir uygulama yapmaktan geçiyor. Yapacağımız uygulamada 4 tane button ile 4 farklı toast mesajı göstereceğiz. Bu mesajlarda uygulamalarda ve web sayfalarında sıklıkla kullanılan hata, uyarı, bilgi ve başarılı mesajlarını göstereceğiz. Bu mesajları aşağıda ki şekilde görüldüğü gibi bir tane resim ve yanında mesaj şeklinde tasarlayacağız.

1. Mesajlarda kullanacağımız iconlar için bulduğumuz png resimleri res/drawable/ dizinine kopyalıyoruz. (danger.png, warning.png, info.png, success.png)

2. res/layout/ dizininde activity_main.xml dosyamızı oluşturuyoruz. Bu dosyada butonlarımızı yerleştireceğiz. Detaylar için kod bloğunu inceleyebilirsiniz.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context="com.sdahmet.customtoast.MainActivity">
<Button
android:id="@+id/button_danger"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:background="#e13737"
android:text="Hata Mesajı Göster"
android:textColor="#fff" />
<Button
android:id="@+id/button_warning"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="#ecb206"
android:text="Uyarı Mesajı Göster"
android:textColor="#fff" />
<Button
android:id="@+id/button_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="#37a6e6"
android:text="Bilgi Mesajı Göster"
android:textColor="#fff" />
<Button
android:id="@+id/button_success"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#3eba33"
android:text="Başarı Mesajı Göster"
android:textColor="#fff" />
</LinearLayout>
Ekran görüntüsü

3. res/layout/ dizininde danger_custom_toast.xml dosyamızı oluşturuyoruz. Burada bir LinearLayout içerisine, icon için bir ImageView ve mesajımızı göstermek için bir TextView nesnesi ekliyoruz. Bu dosya ile toast mesajımızın görünümünü oluşturuyoruz.
danger_custom_toast.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/ct_danger_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
app:srcCompat="@drawable/danger" />
<TextView
android:textColor="#fff"
android:padding="5dp"
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Custom Toast-Hata Mesajı" />
</LinearLayout>

4. Dikkat ederseniz yukarıdaki kod bloğunda LinearLayout un background özelliğine @drawable/ct_danger_bg şeklinde bir tanımlama yaptık. Bu dosya ile biz toast mesajımızın arka plan detaylarını oluşturduk. res/drawable/ dizininde ct_danger_bg.xml dosyamızı oluşturuyoruz.
ct_danger_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="2dp"
android:color="#e13737" />
<corners android:radius="5dp" />
<padding
android:bottom="7dp"
android:left="7dp"
android:right="7dp"
android:top="7dp" />
<solid android:color="#e76161" />
</shape>
5. Şimdi asıl işi yapan kısım olan java dosyamızı oluşturuyoruz.
MainActivity.java
package com.sdahmet.ctoast;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button btnDanger, btnWarning, btnInfo, btnSuccess;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnDanger = (Button) findViewById(R.id.button_danger);
btnWarning = (Button) findViewById(R.id.button_warning);
btnInfo = (Button) findViewById(R.id.button_info);
btnSuccess = (Button) findViewById(R.id.button_success);
btnDanger.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showDangerToast();
}
});
btnWarning.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showWarningToast();
}
});
btnInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showInfoToast();
}
});
btnSuccess.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showSuccessToast();
}
});
}
public void showDangerToast() {
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.danger_custom_toast, null);
Toast toast = new Toast(this);
toast.setView(view);
toast.setDuration(Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
public void showWarningToast() {
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.warning_custom_toast, null);
Toast toast = new Toast(this);
toast.setView(view);
toast.setDuration(Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
public void showInfoToast() {
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.info_custom_toast, null);
Toast toast = new Toast(this);
toast.setView(view);
toast.setDuration(Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
public void showSuccessToast() {
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.success_custom_toast, null);
Toast toast = new Toast(this);
toast.setView(view);
toast.setDuration(Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
}
Burada öncelikle Button sınıfından değişkenler üretip, onları activity_main.xml dosyasında oluşturduğumuz butonlarla bağlıyoruz. Daha sonra bu butonların tıklanma olaylarında showDangerToast(), showWarningToast(), showInfoToast() ve showSuccessToast() fonksiyonlarını sırasıyla çağırıyoruz.
public void showDangerToast() {
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.danger_custom_toast, null);
Toast toast = new Toast(this);
toast.setView(view);
toast.setDuration(Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
Bu fonksiyonlarda toast mesajlarımızı oluşturup ekranda gösteriyoruz.
Sonuç ekran görüntüsü

