Android的小吃店:错误充气SnackbarLayout [英] Android SnackBar: error inflating SnackbarLayout
问题描述
我想尝试新的小吃吧从谷歌所提供的官方设计库。它的使用非常接近吐司,所以我认为这将是很简单尝试一下。
我已经试过了,在仿真器上运行5.1以及三星Galaxy S6边缘运行5.0。
我的问题是,应用程序崩溃时,它应该显示小吃吧。
code
包com.jayway.andreas.test;
进口android.app.Activity;
进口android.os.Bundle;
进口android.support.design.widget.Snackbar;
进口android.view.View;
公共类MainActivity延伸活动{
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
Snackbar.make(V,R.string.test,Snackbar.LENGTH_LONG)
.setAction(行动!,新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
// NOP
}
})
。显示();
}
});
}
}
布局:
< XML版本=1.0编码=UTF-8&GT?;
< RelativeLayout的
机器人:ID =@ + ID / root_layout
的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:paddingBottom会=@扪/ activity_vertical_margin
机器人:以下属性来=@扪/ activity_horizontal_margin
机器人:paddingRight =@扪/ activity_horizontal_margin
机器人:paddingTop =@扪/ activity_vertical_margin
工具:上下文=MainActivity。>
<按钮
机器人:ID =@ + ID /按钮
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_alignParentTop =真
机器人:layout_centerHorizontal =真
机器人:文本=按钮/>
< / RelativeLayout的>
摇篮文件
应用插件:com.android.application
安卓{
compileSdkVersion 22
buildToolsVersion23.0.0 RC1
defaultConfig {
的applicationIDcom.jayway.andreas.test
的minSdkVersion 21
targetSdkVersion 22
版本code 1
VERSIONNAME1.0
}
buildTypes {
推出 {
minifyEnabled假
proguardFiles getDefaultProguardFile('ProGuard的-android.txt'),'proguard-rules.pro
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
依赖{
编译文件树(导演:库,包括:['的* .jar'])
编译com.android.support:design:22.2.0
}
我曾尝试提供不同的意见(根RelativeLayout的,视图按钮和窗口的装饰视图)作为第一个参数,但没有哪一个我提供了我仍然得到以下堆栈跟踪此事:
android.view.InflateException:二进制XML文件中的行#18:错误充气类android.support.design.widget.Snackbar $ SnackbarLayout E / AndroidRuntime(19107):在android.view.LayoutInflater.createView(LayoutInflater.java:640) E / AndroidRuntime(19107):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) E / AndroidRuntime(19107):在android.view.LayoutInflater.inflate(LayoutInflater.java:483) E / AndroidRuntime(19107):在android.view.LayoutInflater.inflate(LayoutInflater.java:415) E / AndroidRuntime(19107):在android.support.design.widget.Snackbar(Snackbar.java:119)。 E / AndroidRuntime(19107):在android.support.design.widget.Snackbar.make(Snackbar.java:140) E / AndroidRuntime(19107):在android.support.design.widget.Snackbar.make(Snackbar.java:164) E / AndroidRuntime(19107):在com.jayway.andreas.test.MainActivitykr8.51onClick(MainActivity.java:20) E / AndroidRuntime(19107):在android.view.View.performClick(View.java:5217) E / AndroidRuntime(19107):在android.view.View $ PerformClick.run(View.java:20983) E / AndroidRuntime(19107):在android.os.Handler.handleCallback(Handler.java:739) E / AndroidRuntime(19107):在android.os.Handler.dispatchMessage(Handler.java:95) E / AndroidRuntime(19107):在android.os.Looper.loop(Looper.java:145) E / AndroidRuntime(19107):在android.app.ActivityThread.main(ActivityThread.java:6141) E / AndroidRuntime(19107):在java.lang.reflect.Method.invoke(本机方法) E / AndroidRuntime(19107):在java.lang.reflect.Method.invoke(Method.java:372) E / AndroidRuntime(19107):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1399) E / AndroidRuntime(19107):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) E / AndroidRuntime(19107):由:java.lang.reflect.InvocationTargetException E / AndroidRuntime(19107):在java.lang.reflect.Constructor.newInstance(本机方法) E / AndroidRuntime(19107):在java.lang.reflect.Constructor.newInstance(Constructor.java:288) E / AndroidRuntime(19107):在android.view.LayoutInflater.createView(LayoutInflater.java:614) E / AndroidRuntime(19107):17 ...更多 E / AndroidRuntime(19107):android.view.InflateException:二进制XML文件中的行#34:错误充气类产生的原因 E / AndroidRuntime(19107):在android.view.LayoutInflater.createView(LayoutInflater.java:640) E / AndroidRuntime(19107):在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) E / AndroidRuntime(19107):在android.view.LayoutInflater.onCreateView(LayoutInflater.java:689) E / AndroidRuntime(19107):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748) E / AndroidRuntime(19107):在android.view.LayoutInflater.rInflate(LayoutInflater.java:813) E / AndroidRuntime(19107):在android.view.LayoutInflater.inflate(LayoutInflater.java:480) E / AndroidRuntime(19107):在android.view.LayoutInflater.inflate(LayoutInflater.java:415) E / AndroidRuntime(19107):在android.view.LayoutInflater.inflate(LayoutInflater.java:366) E / AndroidRuntime(19107):在android.support.design.widget.Snackbar $ SnackbarLayout(Snackbar.java:526)。 E / AndroidRuntime(19107):20 ...更多 E / AndroidRuntime(19107):由:java.lang.reflect.InvocationTargetException E / AndroidRuntime(19107):在java.lang.reflect.Constructor.newInstance(本机方法) E / AndroidRuntime(19107):在java.lang.reflect.Constructor.newInstance(Constructor.java:288) E / AndroidRuntime(19107):在android.view.LayoutInflater.createView(LayoutInflater.java:614) E / AndroidRuntime(19107):28 ...更多 E / AndroidRuntime(19107):java.lang.RuntimeException的:产生的原因无法解析属性索引13 E / AndroidRuntime(19107):在android.content.res.TypedArray.getDrawable(TypedArray.java:760) E / AndroidRuntime(19107):在android.view.View(View.java:3990)。 E / AndroidRuntime(19107):在android.widget.TextView(TextView.java:1021)。 E / AndroidRuntime(19107):在android.widget.TextView(TextView.java:1016)。 E / AndroidRuntime(19107):在android.widget.TextView(TextView.java:1012)。 E / AndroidRuntime(19107):...... 31多个
二的想法是什么可能是错误的。
首先,确保你使用了正确的摇篮依赖性:
编译com.android.support:design:22.2.0
二,请确保您的活动被延长 AppCompatActivity
,而不是活动
或 ActionBarActivity
。
您可以阅读全文后的更多细节,但这里的相关报价大约需要AppCompat新护设计库:
请注意,由于设计库依赖于支持V4和 AppCompat支持库,这些将被自动包含时 您添加设计库的依赖关系。
如果你想知道为什么,你可以阅读这或这个关于Android的新的preferred更多的背景知识处理回调,特别是使用方法 AppCompatDelegate
。
I wanted to try out the new Snackbar from the official design library provided by Google. Its usage is very close to a Toast so I thought it would be simple enough to try out.
I've tried it out on an emulator running 5.1 as well as Samsung Galaxy S6 Edge running 5.0.
My problem is that the app crashes when it's supposed to display the Snackbar.
Code
package com.jayway.andreas.test;
import android.app.Activity;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar.make(v, R.string.test, Snackbar.LENGTH_LONG)
.setAction("Action!", new View.OnClickListener() {
@Override
public void onClick(View v) {
// NOP
}
})
.show();
}
});
}
}
Layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/root_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="Button"/>
</RelativeLayout>
Gradle file
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "23.0.0 rc1"
defaultConfig {
applicationId "com.jayway.andreas.test"
minSdkVersion 21
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:design:22.2.0'
}
I have tried providing different views(root RelativeLayout, view of button and the window's decor view) as the first parameter, but no matter which one I've provided I still get the following stacktrace:
android.view.InflateException: Binary XML file line #18: Error inflating class android.support.design.widget.Snackbar$SnackbarLayout E/AndroidRuntime(19107): at android.view.LayoutInflater.createView(LayoutInflater.java:640) E/AndroidRuntime(19107): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) E/AndroidRuntime(19107): at android.view.LayoutInflater.inflate(LayoutInflater.java:483) E/AndroidRuntime(19107): at android.view.LayoutInflater.inflate(LayoutInflater.java:415) E/AndroidRuntime(19107): at android.support.design.widget.Snackbar.(Snackbar.java:119) E/AndroidRuntime(19107): at android.support.design.widget.Snackbar.make(Snackbar.java:140) E/AndroidRuntime(19107): at android.support.design.widget.Snackbar.make(Snackbar.java:164) E/AndroidRuntime(19107): at com.jayway.andreas.test.MainActivitykr8.51onClick(MainActivity.java:20) E/AndroidRuntime(19107): at android.view.View.performClick(View.java:5217) E/AndroidRuntime(19107): at android.view.View$PerformClick.run(View.java:20983) E/AndroidRuntime(19107): at android.os.Handler.handleCallback(Handler.java:739) E/AndroidRuntime(19107): at android.os.Handler.dispatchMessage(Handler.java:95) E/AndroidRuntime(19107): at android.os.Looper.loop(Looper.java:145) E/AndroidRuntime(19107): at android.app.ActivityThread.main(ActivityThread.java:6141) E/AndroidRuntime(19107): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(19107): at java.lang.reflect.Method.invoke(Method.java:372) E/AndroidRuntime(19107): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) E/AndroidRuntime(19107): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) E/AndroidRuntime(19107): Caused by: java.lang.reflect.InvocationTargetException E/AndroidRuntime(19107): at java.lang.reflect.Constructor.newInstance(Native Method) E/AndroidRuntime(19107): at java.lang.reflect.Constructor.newInstance(Constructor.java:288) E/AndroidRuntime(19107): at android.view.LayoutInflater.createView(LayoutInflater.java:614) E/AndroidRuntime(19107): ... 17 more E/AndroidRuntime(19107): Caused by: android.view.InflateException: Binary XML file line #34: Error inflating class E/AndroidRuntime(19107): at android.view.LayoutInflater.createView(LayoutInflater.java:640) E/AndroidRuntime(19107): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) E/AndroidRuntime(19107): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689) E/AndroidRuntime(19107): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748) E/AndroidRuntime(19107): at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) E/AndroidRuntime(19107): at android.view.LayoutInflater.inflate(LayoutInflater.java:480) E/AndroidRuntime(19107): at android.view.LayoutInflater.inflate(LayoutInflater.java:415) E/AndroidRuntime(19107): at android.view.LayoutInflater.inflate(LayoutInflater.java:366) E/AndroidRuntime(19107): at android.support.design.widget.Snackbar$SnackbarLayout.(Snackbar.java:526) E/AndroidRuntime(19107): ... 20 more E/AndroidRuntime(19107): Caused by: java.lang.reflect.InvocationTargetException E/AndroidRuntime(19107): at java.lang.reflect.Constructor.newInstance(Native Method) E/AndroidRuntime(19107): at java.lang.reflect.Constructor.newInstance(Constructor.java:288) E/AndroidRuntime(19107): at android.view.LayoutInflater.createView(LayoutInflater.java:614) E/AndroidRuntime(19107): ... 28 more E/AndroidRuntime(19107): Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 13 E/AndroidRuntime(19107): at android.content.res.TypedArray.getDrawable(TypedArray.java:760) E/AndroidRuntime(19107): at android.view.View.(View.java:3990) E/AndroidRuntime(19107): at android.widget.TextView.(TextView.java:1021) E/AndroidRuntime(19107): at android.widget.TextView.(TextView.java:1016) E/AndroidRuntime(19107): at android.widget.TextView.(TextView.java:1012) E/AndroidRuntime(19107): ... 31 more
Two thoughts on what could be wrong.
First, make sure you are using the correct gradle dependency:
compile 'com.android.support:design:22.2.0'
Second, make sure your activity is extending AppCompatActivity
and not Activity
or ActionBarActivity
.
You can read the full post for more details, but here's the relevant quote about needing AppCompat with the new Support Design library:
Note that as the Design library depends on the Support v4 and AppCompat Support Libraries, those will be included automatically when you add the Design library dependency.
If you want to know why, you can read this or this for more background about Android's new "preferred" way of handling callbacks, specifically using AppCompatDelegate
.
这篇关于Android的小吃店:错误充气SnackbarLayout的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!