Android的小吃店:错误充气SnackbarLayout小吃店、错误、Android、SnackbarLayout

2023-09-06 14:32:48 作者:半城烟雨

我想尝试新的小吃吧从谷歌所提供的官方设计库。它的使用非常接近吐司,所以我认为这将是很简单尝试一下。

我已经试过了,在仿真器上运行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:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:paddingBottom会=@扪/ activity_vertical_margin
    机器人:以下属性来=@扪/ activity_horizo​​ntal_margin
    机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
    机器人:paddingTop =@扪/ activity_vertical_margin
    工具:上下文=MainActivity。>

    <按钮
        机器人:ID =@ + ID /按钮
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignParentTop =真
        机器人:layout_centerHorizo​​ntal =真
        机器人:文本=按钮/>
< / 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
}
 
只有5张桌子又怎样 翔安火了40年的小破店,每天都有人来抢着吃

我曾尝试提供不同的意见(根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.