공식 디자인 라이브러리의 FloatingActionButton이있는 InflateException


88

FloatingActionButtonGoogle 지원 디자인 라이브러리의 공식 을 사용하여 버그가 발생합니다 .

여기 내 LogCat이 있습니다.

android.view.InflateException: Binary XML file line #34: Error inflating class android.support.design.widget.FloatingActionButton
at android.view.LayoutInflater.createView(LayoutInflater.java:633)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:655)
at android.view.LayoutInflater.inflate(Unknown Source)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at ---.---.com.---.SubCategoryFragment.onCreateView(SubCategoryFragment.java:47)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:458)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
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:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:117)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
... 24 more
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:968)
at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1014)
at android.graphics.drawable.RippleDrawable$RippleState.<init>(RippleDrawable.java:910)
at android.graphics.drawable.RippleDrawable.createConstantState(RippleDrawable.java:901)
at android.graphics.drawable.RippleDrawable.createConstantState(RippleDrawable.java:90)
at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:932)
at android.graphics.drawable.RippleDrawable.mutate(RippleDrawable.java:891)
at android.view.View.applyBackgroundTint(View.java:16324)
at android.view.View.setBackgroundDrawable(View.java:16193)
at android.support.design.widget.FloatingActionButton.access$201(FloatingActionButton.java:56)
at android.support.design.widget.FloatingActionButton$1.setBackgroundDrawable(FloatingActionButton.java:118)
at android.support.design.widget.FloatingActionButtonLollipop.setBackgroundDrawable(FloatingActionButtonLollipop.java:75)
at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:131)
at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:79)
... 27 more

내 앱을 가리키는 유일한 줄은 xml파일을 팽창시키는 곳 과 해당 파일의 FloatingActionButton.

   <android.support.design.widget.FloatingActionButton
        android:id="@+id/myFABSubCat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_margin="16dp"
        android:backgroundTint="@color/accent"
        android:src="@drawable/add_icon"
        app:borderWidth="0dp"
        app:elevation="4sp" />

추가 정보 :

내 앱 테마는 다음과 같습니다.

<resources>

    <!-- Base application theme. -->
    <style name="MBTIAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primaryDark</item>
        <item name="colorAccent">@color/accent</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

    <style name="ThemeNoActionBar" parent="MBTIAppTheme">
        <item name="windowActionBar">false</item>
    </style>

</resources>

예, AppCompatActivity.

이전 버전의 appcompat을 사용하고있는 것으로 나타났습니다.

com.android.support:appcompat-v7:22.1.1

이것은 최신 것 같습니다.

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

또한,

minSdkVersion 16
targetSdkVersion 22

이제 GONEFAB에 대해 어떤 경우 에는 Visibility를 로 설정 했지만 이것은 부풀려서 문제가 될 수 없습니다.

이제 이것은 5.1 장치에서 작동하지만 문제가있는 사용자는 5.0을 가지고 있습니다.

이것은 알려진 버그입니까 아니면 내가 뭔가 잘못하고 있습니까?


5
android:backgroundTint롤리팝 이전 기기에서는 문제가 될 수 있습니다. app:backgroundTint대신 사용하십시오 . 그래도 5.0에 대한 문제를 지적 할 수 없습니다.
Markus Rubey 2015 년

@MarkusRubey 감사합니다. 그것은 바꿀 가치가 있습니다. 나는 그것을 변경하고 Gradle에서 appCompat 라이브러리를 업데이트하고 문제가 해결되는지 확인했습니다. ... 난 내가있는 그 색조를했다하더라도 시험 때 나를 위해 사전 5.0 장치 또는 에뮬레이터에 추락 결코 알 수 있습니까하지만 모든 장치가 동일하게 만들어집니다.
TheLettuceMaster

1
@MarkusRubey이 문제를 해결 한 것이 귀하의 의견이라고 생각합니다. app당신이 말한 것처럼 사용하지 않는 한 5.1 업과 호환되는 틴팅 문제 . 대답으로 자유롭게 추가하십시오.
TheLettuceMaster 2015-06-17

답변:


225

com.android.support:appcompat-v7:21+Android 5.1 (API 레벨 21) 이전 버전을 실행하는 기기에서 색조 위젯에 대한 지원이 추가되었습니다. 그것을 사용하려면 AppCompat테마 를 확장하거나 설정하고 app:backgroundTint대신 android:backgroundTint.

예:

<android.support.design.widget.FloatingActionButton 
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="16dp"
    android:src="@drawable/icon"
    app:backgroundTint="@color/accent"
    app:borderWidth="0dp" />

5
API 21 (Android 5.0)에 backgroundTint 지원이 추가되었습니다. developer.android.com/reference/android/… 사양에 따라 지원 라이브러리없이 Android 5.0에서 backgroundTint를 사용할 수 있어야합니다. 실제로는 충돌하는 것처럼 보이며 작동하려면 지원 라이브러리를 사용해야합니다. 개발자 문서에서 v21로 표시된 API가 실제로 v22까지 작동하지 않는 이유를 혼동하는 다른 사람을 위해 이것을 언급 할 것이라고 생각했습니다. 버그 인 것 같습니다.
OldSchool4664

50

그냥 교체

<android.support.design.widget.FloatingActionButton 
...
...
android:backgroundTint
/>

...에

<android.support.design.widget.FloatingActionButton 
...
...
app:backgroundTint
/>

3
xmlns : app = " schemas.android.com/apk/res-auto "네임 스페이스 를 추가하는 것을 잊지 마십시오 !
Sev

제 경우 문제는 android : background 속성으로 배경을 설정하는 것입니다. 응용 프로그램과 함께 교체 : backgroundTint 문제 해결
안드레이 콜 레스 니 코프

13

VectorDrawableCompat(벡터 자산)을 사용하는 경우 다음 을 사용해야합니다.

app:srcCompat="@drawable/x"

대신에:

android:src="@drawable/x"

7

나는 같은 문제가 있었고 다른 해결책을 시도했습니다. 그러나 나를 위해 일한 것은 appcompat 및 디자인 지원 라이브러리 버전이 동일한 지 확인하는 것이 었습니다. 예를 들면 :

compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.2.0'


3

다음 android으로 변경 하십시오 app.

android:backgroundTint="@color/accent"

에:

app:backgroundTint="@color/accent"

2
Stack Overflow에 오신 것을 환영합니다! 이미지와 스크린 샷은 게시물에 좋은 추가 기능이 될 수 있지만 게시물이 없어도 여전히 명확하고 유용한 지 확인하십시오. 코드 이미지 또는 오류 메시지를 게시하지 마십시오. 이유를 읽어보십시오 . 대신 실제 코드 / 메시지를 복사하여 붙여 넣거나 게시물에 직접 입력하십시오.
Filnor

0

제 경우에는 활동 테마의 잘못된 구성 때문이었습니다. 앱 테마를 Theme.AppCompat.xxx로 변경 한 후 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.