Как исправить android.view.InflateException при использовании простой панели инструментов - PullRequest
0 голосов
/ 25 июня 2018

Я использую Android Studio. Я не использую пользовательскую панель инструментов. Просто добавить в приложение для Android. Я расширяю AppCompatActivity в моей MainActivity. Я пробовал несколько решений по переполнению стека, которые не работают. Я думаю, это потому, что мой выпускник более актуален.

Это журнал ошибок:

06-21 12:23:30.471 1455-1455/com.kelldavis.movieguide E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.kelldavis.movieguide, PID: 1455
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kelldavis.movieguide/com.kelldavis.movieguide.ui.MainActivity}: android.view.InflateException: Binary XML file line #10: Failed to resolve attribute at index 4: TypedValue{t=0x2/d=0x10102eb a=2 r=0x7f070051}
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2690)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2755)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1495)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6196)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
 Caused by: android.view.InflateException: Binary XML file line #10: Failed to resolve attribute at index 4: TypedValue{t=0x2/d=0x10102eb a=2 r=0x7f070051}
 Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 4: TypedValue{t=0x2/d=0x10102eb a=2 r=0x7f070051}
    at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:716)
    at android.view.ViewGroup$MarginLayoutParams.<init>(ViewGroup.java:7247)
    at android.widget.FrameLayout$LayoutParams.<init>(FrameLayout.java:439)
    at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:370)
    at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:369)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:860)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
    at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
    at com.kelldavis.movieguide.ui.MainActivity.onCreate(MainActivity.java:52)
    at android.app.Activity.performCreate(Activity.java:6698)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1140)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2643)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2755)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1495)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6196)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

Эта строка в моей MainActivity - это то, что выдается в журнале:

        setContentView(R.layout.activity_main);

Это мой файл activity_main.xml:

    <FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_coordinator"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="ui.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/main_recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="@dimen/attr_action_bar_size" />

    <include layout="@layout/toolbar_w_shadow" />
</FrameLayout>

Это мой файл toolbar_w_shadow.xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="wrap_content"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar_elevated"
        android:layout_width="match_parent"
        android:layout_height="@dimen/attr_action_bar_size"
        android:background="@color/attrColorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <View
        android:layout_width="match_parent"
        android:layout_height="4dp"
        android:background="@drawable/shadow" />
</LinearLayout>

По запросу, вот мое размерное значение для размера панели действий:

<dimen name="attr_action_bar_size">?android:attr/actionBarSize</dimen>

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

измените свой код toolbar_w_shadow.xml с помощью этого.

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="wrap_content"
    android:orientation="vertical">

   <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar_elevated"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/attrColorPrimary"
            app:theme="@style/Theme.AppCompat.NoActionBar" />


    <View
        android:layout_width="match_parent"
        android:layout_height="4dp"
        android:background="@drawable/shadow" />
</LinearLayout>
0 голосов
/ 29 июня 2018

Вы установили ? Android: attr / actionBarSize из Dimens.xml файла, который генерирует исключение.

Решение

  1. Установите его напрямую, не извлекайте его из файла других ресурсов

activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/main_coordinator"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context=".MainActivity">

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

        <include layout="@layout/toolbar_w_shadow" />

    </FrameLayout>

toolbar_w_shadow.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 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="wrap_content"
        android:orientation="vertical">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar_elevated"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@color/attrColorPrimary"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <View
            android:layout_width="match_parent"
            android:layout_height="4dp"
            android:background="@drawable/shadow" />

    </LinearLayout>

2. Набор из styles.xml

    <style name="myToolbarHeight" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:layout_height">?android:attr/actionBarSize</item>
    </style>

    <style name="myToolbarTopMargin" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:layout_marginTop">?android:attr/actionBarSize</item>
    </style>

replace android: layout_height = "? Android: attr / actionBarSize" to style = "@ style / myToolbarHeight" и android: layout_marginTop = "? Android: attr / actionBarSize " to style =" @ style / myToolbarTopMargin ".

0 голосов
/ 25 июня 2018

Измените файл манифеста под кодом, задайте тему, как показано ниже, и установите верхнюю точку тяжести на макет панели инструментов.

<activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
</activity>
...