Vấn đề
Toast.LENGTH_LONG chỉ hiển thị ~3.5 giây. Đôi khi cần hiển thị lâu hơn (ví dụ 10 giây, 50 giây).
Giải pháp: Dùng Handler để tự hủy Toast sau thời gian tùy chỉnh
Bước 1: Tạo project
Bước 2: Layout activity_main.xml
<LinearLayout ... android:orientation="vertical" android:gravity="center" ...>
<TextView android:id="@+id/text" ... android:text="click to show toast at top" />
</LinearLayout>
Bước 3: MainActivity.java
public class MainActivity extends AppCompatActivity {
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = findViewById(R.id.text);
text.setOnClickListener(v -> {
final Toast toast = Toast.makeText(MainActivity.this, "Sample Toast", Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 0, 250);
toast.show();
// Hủy toast sau 50 giây (50000ms)
new Handler().postDelayed(() -> toast.cancel(), 50000);
});
}
}
Giải thích:
- Tạo Toast bình thường với LENGTH_LONG.
- Dùng
Handler.postDelayed()để gọitoast.cancel()sau thời gian mong muốn (ms). - Ví dụ trên set 50000ms = 50 giây. Đổi giá trị này tùy nhu cầu.
Kết quả
Màn hình ban đầu:

Khi click TextView, Toast xuất hiện ở trên cùng và hiển thị 50 giây:

Lưu ý
Cách này hoạt động nhưng không khuyến khích cho UX tốt. Nên dùng Snackbar, Dialog hoặc custom View cho thông báo lâu dài.