Snackbar Error in activity => android.view.InflateException: can be used only with a valid ViewGroup root and attachToRoot=true
在将Android Studio更新到版本3.1.2和gradle到版本4.4之后,我遇到了奇怪的问题,无法在活动中显示小吃栏。
这是代码:
1 2 3 4 | @BindView(R.id.layout_coordinator) CoordinatorLayout coordinatorLayout; Snackbar.make(coordinatorLayout,"hello", Snackbar.LENGTH_LONG).show(); |
我的XMl布局:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/layout_coordinator" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Activities.LoginActivity"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="70dp" android:paddingRight="70dp"> <EditText android:id="@+id/edtMobileNumber" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_below="@+id/txt_RegisterTitle" android:layout_marginTop="19dp" android:gravity="center" android:hint="@string/enterYourMobilePhone" android:inputType="number" android:maxLength="11" android:maxLines="1" /> <Button android:id="@+id/btn_Confirm" android:layout_width="130dp" android:layout_height="40dp" android:layout_below="@+id/edtMobileNumber" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" android:background="@drawable/button_background_green" android:text="@string/confirm" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/white" /> </RelativeLayout> </ScrollView> </android.support.design.widget.CoordinatorLayout> |
这是我得到的错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.myproject/com.company.myproject.Activities.LoginActivity}: android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2702) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) at android.app.ActivityThread.access$900(ActivityThread.java:177) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) Caused by: android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true at android.view.LayoutInflater.inflate(LayoutInflater.java:476) at android.view.LayoutInflater.inflate(LayoutInflater.java:415) at android.support.design.widget.Snackbar.make(Snackbar.java:143) at com.company.myproject.Activities.LoginActivity.onCreate(LoginActivity.java:98) |
如您所见,该错误与布局夸大有关,但无法理解原因:
原因:android.view.InflateException:只能与有效的ViewGroup根一起使用,attachToRoot = true
必须提到的是,我已经使用了建议的每种解决方案:
- 我的支持设计版本是:实现com.android.support:design:27.1.1'
- 该活动是从AppCompatActivity扩展的
- AppTheme是Theme.AppCompat.Light.NoActionBar
- 我已经使用过getWindow()。getDecorView()。findViewById(R.id.layout_coordinator),但没有解决任何问题
很高兴有人可以帮助我。
最后,我找到了解决方案:
快餐栏布局中有一个MERGE标签,在使布局膨胀时会导致异常。 通过注释相关行,可以解决问题。