自定义Toast Inflating - Android

时间:2014-12-09 15:52:38

标签: android toast android-inflate

我正在创建名为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)未定义

1 个答案:

答案 0 :(得分:0)

当然,方法findViewById是Activity的一种方法。

所以示例代码在Activity类中,只调用findViewById会导致没问题。

因此,您的代码在MyToast类中,您应该为Activity的实例调用方法:

((Activity) context).findViewById(R.id.toast_layout_root)