IT TIP

android.support.v7.widget.Toolbar 클래스를 확장하는 중에 오류가 발생 했습니까?

itqueen 2020. 11. 23. 20:44
반응형

android.support.v7.widget.Toolbar 클래스를 확장하는 중에 오류가 발생 했습니까?


이 방법 에 따라 내 앱의 머티리얼 디자인을 얻으려고합니다 .

앱을 실행할 때마다 다음 오류가 표시됩니다.

android.support.v7.widget.Toolbar 클래스를 확장하는 중에 오류가 발생했습니다.

appcompat을 제대로 추가했는지 확인했습니다. 그러나 그것은 모두 나에게 옳다. 그래서 내가 뭘 잘못하고 있는지 말 해주세요.

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion '21.0.2'

    defaultConfig {
        applicationId "io.bxbxbai.feedlistviewdemo"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles 'proguard-rules.pro'
        }
    }
}

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':materialDesign')
    compile 'com.balysv.materialmenu:material-menu:1.4.0'
    compile 'com.android.support:appcompat-v7:21.+'
}

Logcat

02:11.641  20583-20583/io.bxbxbai.feedlistviewdemo E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: io.bxbxbai.feedlistviewdemo, PID: 20583
    java.lang.RuntimeException: Unable to start activity ComponentInfo{io.bxbxbai.feedlistviewdemo/io.bxbxbai.androiddemos.MainActivity}: android.view.InflateException: Binary XML file line #3: Error inflating class android.support.v7.widget.Toolbar
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2224)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2283)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5158)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #3: Error inflating class android.support.v7.widget.Toolbar
            at android.view.LayoutInflater.createView(LayoutInflater.java:620)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
            at android.view.LayoutInflater.parseInclude(LayoutInflater.java:816)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:745)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
            at io.bxbxbai.androiddemos.MainActivity.onCreate(MainActivity.java:31)
            at android.app.Activity.performCreate(Activity.java:6144)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2181)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2283)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5158)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at android.view.LayoutInflater.createView(LayoutInflater.java:594)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
            at android.view.LayoutInflater.parseInclude(LayoutInflater.java:816)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:745)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
            at io.bxbxbai.androiddemos.MainActivity.onCreate(MainActivity.java:31)
            at android.app.Activity.performCreate(Activity.java:6144)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2181)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2283)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5158)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NoSuchMethodError: android.support.v4.content.ContextCompat.getDrawable
            at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:133)
            at android.support.v7.internal.widget.TintTypedArray.getDrawable(TintTypedArray.java:62)
            at android.support.v7.widget.Toolbar.<init>(Toolbar.java:248)
            at android.support.v7.widget.Toolbar.<init>(Toolbar.java:190)
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at android.view.LayoutInflater.createView(LayoutInflater.java:594)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
            at android.view.LayoutInflater.parseInclude(LayoutInflater.java:816)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:745)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
            at io.bxbxbai.androiddemos.MainActivity.onCreate(MainActivity.java:31)
            at android.app.Activity.performCreate(Activity.java:6144)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2181)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2283)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5158)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)

편집하다

toolbar.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimaryDark"/>

activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity"
        tools:ignore="MergeRootFrame">

        <include android:id="@+id/toolbar" layout="@layout/toolbar" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btn_feed_list_demo"
            android:text="@string/feed_list_demo"/>

    </RelativeLayout>

죄송합니다. 나는 오래 전에이 문제를 해결했습니다. 저는 많은 변화를했습니다. 그래서 나는 어떤 것이 트릭을하는지 알 수 없습니다.

  1. Jared Burrows가 제안한대로 ID를 변경했습니다.

  2. 내 지원 라이브러리를 제거하고 내 프로젝트를 정리하고 다시 추가했습니다.

  3. 파일-> 캐시 무효화 / 다시 시작으로 이동합니다.

작동하기를 바랍니다.

이것이 내 코드의 모습입니다.

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
        android:id="@+id/toolbar_actionbar"
        layout="@layout/toolbar_default"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/toolbar_actionbar">

        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

        <fragment
            android:id="@+id/fragment_drawer"
            android:name="com.arul.anahy.drawer.NavigationDrawerFragment"
            android:layout_width="@dimen/navigation_drawer_width"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:layout="@layout/fragment_navigation_drawer"/>
    </android.support.v4.widget.DrawerLayout>
</RelativeLayout>

toolbar_default.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    style="@style/ToolBarStyle"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="@dimen/abc_action_bar_default_height_material"/>

ToolBarStyle

<style name="ToolBarStyle" parent="">
        <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
        <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
 </style>

새로운 androidx 구현을 사용하는 경우 툴바를 입력하면 Studio에서에 자동 완성 android.support.v7.widget.Toolbar되지만 androidx.appcompat.widget.Toolbar대신 사용해야 합니다. 그렇지 않으면이 오류가 발생합니다.


다음을 대체하여이 문제를 해결할 수있었습니다.

툴바 레이아웃에서 다음과 같은 모든 항목을 교체합니다.

android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"

android:minHeight="@dimen/abc_action_bar_default_height_material"
android:background="@color/myColor"

이것은 androidx 구현으로 새로운 안드로이드에서 이전 코드를 사용하려고 할 때 나에게 일어났습니다. XML 정의를 다음으로 변경하십시오.

<androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimary"
            android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
            app:titleTextColor="@android:color/white" />

그런 다음 Java 코드에서;

import androidx.appcompat.widget.Toolbar;

이 블로그에서이 문제를 해결했습니다. http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

문제는 잘못된 테마를 사용한다는 것입니다. 내 프로젝트에서 Theme.AppCompat.NoActionBar와 같은 테마를 선택할 수 있습니다.

나는 당신을 돕고 싶습니다.


23.2.0 버전의 AppCompat Library를 사용하는 것과 동일한 문제가 발생했습니다. 지원 라이브러리를 23.2.1로 업데이트했고 문제가 해결되었습니다.

이 툴바 문제는 23.2.1에서 해결되었습니다.


이 Google 블로그 게시물을 읽으십시오. http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

<android.support.v7.widget.Toolbar
    android:id="@+id/my_awesome_toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

또한 동일한 "ID"를 두 번 제공하는 경우 포함에서 "id"를 제거하십시오.

<include android:id="@+id/toolbar" layout="@layout/toolbar" />

나는 똑같은 문제에 직면했지만 appcompatv23.2.0. 위의 모든 제안을 시도했지만 작업을 수행했습니다. 그런 다음 내 Gradle 파일로 이동하여 다음을 대체했습니다.

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

}

와:

dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
}

프로젝트를 다시 빌드하면 문제가 사라졌습니다. 앱 컴팩트 v23.2.0의 문제 일 수 있으며, 새로운 업데이트로 작업 할 수 있도록 더 나은 솔루션이 나올 수 있기를 바랍니다.

도움이 되었기를 바랍니다. 감사합니다.


앱 build.gradle 파일을 수정하여이 문제를 해결했습니다.

Gradle 플러그인 2.0 이상

 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  

Gradle 플러그인 1.5의 경우

 android {  
   defaultConfig {  

     generatedDensities = []  
  }  

  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 } 

나는 이것이 오래된 질문이라는 것을 알고 있지만 최근에 동일한 문제에 직면했습니다. (I 설정 한 경우 그것은 Proguard와 문제 었죠 minifyEnabledfalse이 일이 중단되었습니다.)

이를 중지하기 위해 proguard를 활성화 한 상태에서 다른 곳에서 찾은 솔루션 덕분에 proguard 규칙 파일에 다음을 추가했습니다 (문제가 proguard라는 것을 발견 한 후).

-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

필요한지 확실하지 않지만 다음 줄도 추가했습니다.

-keep class com.google.** { *; }
-keep interface com.google.** { *; }

나는 같은 문제에 직면했다. 나를 위해 일한 솔루션. v7.Toolbar를 사용하는 경우 Theme.AppCompat. *에서 확장 된 테마를 사용해야합니다. android : Theme.Material. *에서 확장 된 테마는 스타일 속성이 다르기 때문에 사용할 수 없습니다.

도움이 되길 바랍니다.


이 줄을 아래와 같이 제거했습니다.

이전 :

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar1"
    android:layout_width="match_parent"
    android:layout_height="@attr/actionBarSize"
    android:minHeight="@attr/actionBarSize"
    android:layout_alignParentTop="true" >

이후 :

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar1"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_alignParentTop="true" >

"@ attr / actionBarSize"대신 저에게 적합한 특정 치수를 입력하십시오.


이 문제를 해결하려면. 먼저 \ sdk \ extras \ android \ support에서 latestandroid-support-v7-appcompat를 추가해야합니다.

  1. 메인 프로젝트를 닫습니다.
  2. android-support-v7-appcompat를 제거합니다.
  3. Eclipse를 다시 시작하십시오.
  4. android-support-v7-appcompat를 추가합니다.
  5. 청소, 프로젝트를 빌드합니다.
  6. 그런 다음 기본 프로젝트를 열고 모든 프로젝트를 빌드하십시오.
  7. 오류는 여전히 남아 있습니다. 이클립스를 다시 시작하십시오. 그게 다야.

그것은 저에게 효과적이며 Android Studio를 사용하는 것이 좋습니다.


이것은 나를 위해 일했습니다 : gradle에 컴파일 'com.android.support:appcompat-v7:21.0.3'을 추가하십시오. sdk 대상을 21로 변경하십시오. 작동하기를 바랍니다.


나를 위해 그것은 내가 한 후에 작동했습니다.

  • 세정액.
  • 내가 디버깅 한 전화에서 앱을 삭제합니다.
  • Visual Studio를 닫습니다.
  • Android 프로젝트에서 / bin / 및 / obj / 폴더를 삭제합니다.
  • 솔루션을 다시 시작합니다.

위의 솔루션 중 어느 것도 나를 위해 일하지 않았습니다.

내 프로젝트에 툴바가 없었지만 같은 오류가 발생했습니다.

프로젝트를 정리하고 앱을 제거했습니다. 그런 다음 gradlew build --refresh-dependencies를 실행하고 xml 파일에 해당 코드가없는 일부 onclick 이벤트가 있음을 발견했습니다.

나는 그것들을 제거하고 프로젝트를 재 구축했고 작동했습니다.

종속성이 업데이트 된 것처럼 보이지는 않았지만 이는 또 다른 이야기입니다.


제 경우에는 Imageview의 인플레이션 예외, 하위 버전 및 롤리팝 OS 에서이 오류가 발생했습니다.

드로어 블 v-24 폴더의 모든 이미지 파일을 드로어 블 폴더로 이동할 때이 예외를 해결했습니다.


RelativeLayout의 도구 모음을 포함하여 문제가 있었고 LinearLayout을 사용해보십시오. 툴바를 오버레이하려면 다음을 시도하십시오.

 <RelativeLayout>

    <LinearLayout>
      --INCLUDE tOOLBAR--
    </LinearLayout>

    <Button></Button>

 </RelativeLayout>

나는 이유를 이해하지 못하지만 그것은 나를 위해 작동합니다.


It is unclearly why this error happened with me but I solved. I used same layout, in-line or using include, both of them cause NPE error. So I think it's not layout issue.

I had an abstract class call BaseActivity extends ActionBarActivity which have initActionBar() method. I override and call this method in OnCreate of child class. Something like that:

android.support.v7.app.ActionBar mActionBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_book_appointment);

    // Inject View using ButterKnife
    ButterKnife.inject(this);

    // Init toolbar & status bar
    initActionBar();
}

@Override
protected void initActionBar() {
    super.initActionBar();

    setSupportActionBar(mToolBar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    mActionBar = getSupportActionBar();
    mActionBar.setDisplayHomeAsUpEnabled(true);
    mActionBar.setHomeButtonEnabled(true);
}

I HAD NPE ERROR WITH ABOVE CODE. I DON'T KNOW WHY I'M WRONG. I SOLVE BY BELOW CODE AND IT'S LOOK SAME.

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_book_appointment);
    ButterKnife.inject(this);

    setSupportActionBar(mToolBar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    mActionBar = getSupportActionBar();
    mActionBar.setDisplayHomeAsUpEnabled(true);
    mActionBar.setHomeButtonEnabled(true);

    initActionBar();
}

@Override
protected void initActionBar() {
    super.initActionBar();
}

In my case, a problem was in calling inflater.inflate(R.layout.some_layout, null). Null as ViewGroup parameter was the problem.


The solution to the problem for me was found in the XML document for my Main Activity. Originally my toolbar was <android.support.v7.widget.Toolbar. To resolve this I changed it to <android.widget.Toolbar. I do not know why this worked though. Does anyone have any insight as to why?


In the case of Xamarin in VS, you must add

Theme = "@style/MyThemesss"

to youractivity.cs.

I add this and go on.


Problem was for pre-lolipop devices. I was able to solve this problem by replacing the following:

In the Toolbar layout, replace everything which is like this:

android:layout_height="?android:attr/actionBarSize"
android:background="?android:attr/colorPrimary"

with

android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"

For me, the error was that I had:

    <android:support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"/>

instead of:

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"/>

Specifically, I had a colon between "android" and "support" on the first line instead of a period.

참고URL : https://stackoverflow.com/questions/26561235/error-inflating-class-android-support-v7-widget-toolbar

반응형