2015-06-03 69 views
18

我想嘗試谷歌提供的官方設計庫中的新Snackbar。它的使用非常接近吐司,所以我認爲它會很簡單,可以嘗試。Android SnackBar:錯誤膨脹SnackbarLayout

我已經在運行5.1的模擬器以及運行5.0的三星Galaxy S6 Edge上試過了。

我的問題是,應用程序崩潰時,它應該顯示Snackbar。

代碼

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(); 
      } 
     }); 
    } 
} 

佈局:

<?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> 

搖籃文件

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' 
} 

我已經試過各色提供新臺幣意見(根RelativeLayout的,視圖按鈕和窗口的裝飾視圖)作爲第一個參數,但無論是哪一個,我提供我仍然得到以下堆棧跟蹤:

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.<init>(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 <unknown> 
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.<init>(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.<init>(View.java:3990) 
E/AndroidRuntime(19107): at android.widget.TextView.<init>(TextView.java:1021) 
E/AndroidRuntime(19107): at android.widget.TextView.<init>(TextView.java:1016) 
E/AndroidRuntime(19107): at android.widget.TextView.<init>(TextView.java:1012) 
E/AndroidRuntime(19107): ... 31 more 
+0

您是否曾嘗試將根佈局作爲第一個參數傳遞? – Ziem

+0

是的,我添加了一個id給RelativeLayout並傳遞給它相同的結果。 –

+0

@JaredBurrows 更新與佈局,實際上我更新它,而你鍵入的問題,所以你很快:) –

回答

32

上可能是錯誤的兩點思考。

首先,確保你使用了正確的依賴的gradle:

compile 'com.android.support:design:22.2.0' 

第二,確保您的活動正在擴大AppCompatActivity而不是ActivityActionBarActivity

您可以閱讀full post更多細節,但這裏的相關報價大約需要程序兼容性與新的支持設計庫:

需要注意的是由於設計庫依賴於支持V4和 程序兼容性支持庫,那麼當您添加設計庫依賴項時,這些將自動包含在 中。

如果你想知道爲什麼,你可以約的處理回調,特別是使用AppCompatDelegate Android的新的「首選」的方式更多的背景閱讀thisthis

+0

第一部分已經過檢查。 第二部分我不應該需要的東西,因爲這是一個單獨的庫。這意味着我應該能夠擁有這個,並且仍然能夠使用它。 –

+0

@AndreasN,看我編輯的答案。 – hungryghost

+1

解決了它,謝謝!我想每個活動都應該基於AppCompatActivity。 –

相關問題