我正在创建名为MyToast的自定义Toast类:
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>
在MainActivity中使用MyToast:
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));
我试过这样,但我收到了错误:
对于MyToast类型
,方法findViewById(int)未定义
答案 0 :(得分:0)
当然,方法findViewById是Activity的一种方法。
所以示例代码在Activity类中,只调用findViewById会导致没问题。
因此,您的代码在MyToast类中,您应该为Activity的实例调用方法:
((Activity) context).findViewById(R.id.toast_layout_root)