Tạo một Android Toast tùy biến

1- Custom Toast

2- Ví dụ tùy biến Toast

Trên Android Studio tạo mới một project:
  • File > New > New Project > Empty Activity
    • Name: CustomToastExample
    • Package name: org.o7planning.customtoastexample
    • Language: Java
Copy một icon (icon_info.png) vào thư mục drawable của project.
Trong ví dụ này tôi sẽ sử dụng "Resource Layout File" để thiết kế giao diện cho Toast, bạn cũng có thể tạo giao diện cho Toast hoàn toàn bằng mã Java (Xem thêm trong ví dụ).
OK, Nhấn phải chuột vào thư mục "layout" và chọn:
  • New > Layout Resource File
  • File name: layout_custom_toast.xml
  • Root element: LinearLayout
  • Source set: main
  • Directory name: layout
Và bây giờ bạn có thể thiết kế giao diện cho Toast.
Sét đặt ID, Text, Padding, layout_weight cho các thành phần trên giao diện:
layout_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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="10sp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:paddingRight="10sp"
        app:srcCompat="@drawable/icon_info" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Message" />
</LinearLayout>
Giao diện chính của ứng dụng:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button_show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="Show Custom Toast"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package org.o7planning.customtoastexample;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Button buttonShow;

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

        this.buttonShow = (Button) this.findViewById(R.id.button_show);
        this.buttonShow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonShowClicked();
            }
        });
    }

    // Create Toast with "Resource Layout File".
    private void buttonShowClicked()  {
        LayoutInflater inflater = this.getLayoutInflater();

        View layout = inflater.inflate(R.layout.layout_custom_toast, null);
        // TextView in layout_custom_toast.
        TextView textView = (TextView) layout.findViewById(R.id.textView);
        textView.setText("This is a message");
        textView.setTextColor(Color.BLUE);
        // Create Toast
        Toast toast = new Toast(this);
        toast.setDuration(Toast.LENGTH_LONG);
        toast.setView(layout);
        toast.show();
    }

    // Create Toast without "Resource Layout File".
    private void buttonShowClicked2()  {
        LinearLayout layout  = new LinearLayout(this);
        layout.setOrientation(LinearLayout.HORIZONTAL);
        layout.setPadding(10,10, 10, 10);
        //
        ImageView imageView = new ImageView(this);
        imageView.setImageResource(R.drawable.icon_info);
        imageView.setPadding(0, 0, 10, 0);
        //
        TextView textView = new TextView(this);
        textView.setTextColor(Color.BLUE);
        textView.setText("This is a message");

        LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT,0);
        layout.addView(imageView, params1);

        LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT,1);
        layout.addView(textView, params2);

        // Create Toast
        Toast toast = new Toast(this);
        toast.setDuration(Toast.LENGTH_LONG);
        toast.setView(layout);
        toast.show();
    }
}

Xem thêm các chuyên mục: