CountDownTimer ব্যবহার করে কাস্টম টোস্ট ডুরেশন
স্ট্যান্ডার্ড Toast শুধু SHORT (২সেক) এবং LONG (৩.৫সেক) সাপোর্ট করে। এই টিউটোরিয়ালে CountDownTimer ব্যবহার করে যেকোনো ডুরেশনের টোস্ট দেখানো দেখানো হয়েছে।
ধাপ ১: প্রজেক্ট তৈরি করুন
Android Studio-তে নতুন প্রজেক্ট।
ধাপ ২: লেআউট (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:onClick="showToast"/>
</androidx.constraintlayout.widget.ConstraintLayout>
ধাপ ৩: MainActivity.java - CountDownTimer পদ্ধতি
package com.app.sample;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Toast mToastToShow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void showToast(View view) {
int toastDurationInMilliSeconds = 10000; // ১০ সেকেন্ড
mToastToShow = Toast.makeText(this, "হ্যালো ওয়ার্ল্ড, আমি একটি টোস্ট।", Toast.LENGTH_LONG);
CountDownTimer toastCountDown = new CountDownTimer(toastDurationInMilliSeconds, 1000) {
@Override
public void onTick(long millisUntilFinished) {
mToastToShow.show(); // প্রতি সেকেন্ডে পুনরায় দেখান
}
@Override
public void onFinish() {
mToastToShow.cancel(); // শেষে বন্ধ করুন
}
};
mToastToShow.show();
toastCountDown.start();
}
}
ধাপ ৪: ম্যানিফেস্ট
সাধারণ কনফিগারেশন।
⚠️ এই পদ্ধতির সীমাবদ্ধতা
- প্রতি সেকেন্ডে টোস্ট পুনরায় দেখানোর কারণে ফ্লিকার হয়
- সিস্টেম টোস্ট কিউতে يذهبে, অন্য টোস্ট ব্লক করতে পারে
- ব্যবহারকারী অভিজ্ঞতা ভালো নয়
উন্নত বিকল্প: Snackbar (Material Design)
import com.google.android.material.snackbar.Snackbar;
Snackbar.make(findViewById(android.R.id.content), "এটি একটি দীর্ঘ বার্তা", Snackbar.LENGTH_INDEFINITE)
.setAction("বন্ধ করুন", v -> {})
.setDuration(10000) // ১০ সেকেন্ড
.show();
উন্নত বিকল্প ২: কাস্টম টোস্ট লেআউট
// res/layout/custom_toast.xml
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#CC000000"
android:padding="16dp"
android:orientation="horizontal">
<TextView
android:id="@+id/toastText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:textSize="16sp"/>
</LinearLayout>
// জাভাতে
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast, null);
TextView text = layout.findViewById(R.id.toastText);
text.setText("কাস্টম টোস্ট বার্তা");
Toast toast = new Toast(getApplicationContext());
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
উন্নত বিকল্প ৩: DialogFragment (সবচেয়ে linh hoạt)
public class LongToastDialog extends DialogFragment {
private static final String ARG_MESSAGE = "message";
private static final String ARG_DURATION = "duration";
public static LongToastDialog newInstance(String message, int duration) {
LongToastDialog fragment = new LongToastDialog();
Bundle args = new Bundle();
args.putString(ARG_MESSAGE, message);
args.putInt(ARG_DURATION, duration);
fragment.setArguments(args);
return fragment;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String message = getArguments().getString(ARG_MESSAGE);
int duration = getArguments().getInt(ARG_DURATION);
AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());
builder.setMessage(message)
.setCancelable(true);
AlertDialog dialog = builder.create();
// অটো ডিসমিস
new Handler(Looper.getMainLooper()).postDelayed(dialog::dismiss, duration);
return dialog;
}
}
// ব্যবহার
LongToastDialog.newInstance("দীর্ঘ বার্তা", 10000).show(getSupportFragmentManager(), "longToast");