Я создаю собственный класс тостов под названием MyToast:
public class MyToast extends Toast {
public static final int RED = 0;
public static final int BLUE = 1;
public MyToast(Context context, String data, int color) {
super(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.my_toast, null);
setView(layout);
TextView tvToast = (TextView) layout.findViewById(R.id.tvToast);
tvToast.setText(data);
if(color == RED) {
tvToast.setBackgroundResource(R.drawable.red_background);
tvToast.setTextColor(context.getResources().getColor(R.color.red));
} else {
tvToast.setBackgroundResource(R.drawable.blue_background);
tvToast.setTextColor(Color.WHITE);
}
}
}
my_toast.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_layout_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/tvToast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
Использование MyToast в MainActivity:
new MyToast(context, getResources().getString(
R.string.uspesna_najava), MyToast.BLUE).show();
Я получаю это предупреждение:
Избегайте передачи null в качестве корня представления (необходимо для разрешения параметров макета в корневом элементе расширенного макета)
в этой части кода:
View layout = inflater.inflate(R.layout.my_toast, null);
Этот код работает хорошо, но я хочу избавиться от этого предупреждения. Я знаю, что мне нужно раздувать вот так, чтобы избежать этого предупреждения:
View layout = inflater.inflate(R.layout.my_toast, parent, false);
Но где я могу найти родителя?
На официальном сайте Android Developers они расширяют представление следующим образом:
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
View layout = inflater.inflate(R.layout.my_toast, (ViewGroup) findViewById(R.id.toast_layout_root));
Я пробовал так, но получаю ошибку:
Метод findViewById(int) не определен для типа MyToast