在android中制作自定义Toast时出现IllegalargumentException

时间:2015-09-05 16:05:03

标签: java android

我对android很新。我正在制作一个自定义吐司,但是应用程序在屏幕上出现吐司之后就崩溃了。 这是我的mainactivity.java -

'akash@gmail.com','Akash',101,102

and

'akash@gmail.com','Akash2',101,102

这些是我的xml文件。

toast_layout.xml -

public class MainActivity extends Activity {
    int counter = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }   

    public void dosome(View V) {
        Log.d("message","a message");



        if(V.getId() == R.id.launchmap) {
            Toast toast = new Toast(this);
            toast.setGravity(Gravity.BOTTOM, 0, 0);
            toast.setDuration(Toast.LENGTH_LONG);

            LayoutInflater inflater = getLayoutInflater();
            View appear = inflater.inflate(R.layout.toast_layout,(ViewGroup)findViewById(R.id.root),true);
            toast.setView(appear);
            toast.show();
        }
    }

}   

activity_main.xml -

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/imageView1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:src="@drawable/images" />

但是,在inflater.inflate中,如果我将第3个参数传递为false,则一切正常。为什么这样?

1 个答案:

答案 0 :(得分:0)

东西吐司不应该是你视图中某些布局的孩子,它是一个独立的布局。这是你的吐司的布局(在你的情况下是toast_layout.xml)。

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/imageView1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:src="@drawable/images" />

你需要用布局包装它,让我们说一个LinearLayout并为该特定的linearLayout提供id toast_layout_root。像这样

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:id="@+id/toast_layout_root">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/images" />
</LinearLayout>

然后在制作祝酒词时执行此操作

查看appear = inflater.inflate(R.layout.toast_layout,(ViewGroup)findViewById(R.id.toast_layout_root),true);

您当前正在尝试将toast附加到您活动中的linearlayout。祝酒词必须独立。