膨胀类 com.google.android.material.slider.Slider 时出错

moh*_*zza 12 java xml android fragment android-inflate

我想膨胀包含单个搜索栏的布局。通过这种方式,我创建了一个扩展片段类的java类,然后我膨胀了布局。但出现以下错误:

\n

二进制 XML 文件第 #9 行:二进制 XML 文件第 #9 行:膨胀类 com.google.android.material.slider.Slider 时出错

\n
warming.XML is in the following:\n\n    <?xml version="1.0" encoding="utf-8"?>\n<RelativeLayout\n    xmlns:android="http://schemas.android.com/apk/res/android"\n    xmlns:app="http://schemas.android.com/apk/res-auto"\n    android:layout_width="match_parent"\n    android:layout_height="match_parent">\n\n    <com.google.android.material.slider.Slider\n        android:layout_width="327dp"\n        android:layout_height="37dp"\n        android:layout_alignParentStart="true"\n        android:layout_alignParentTop="true"\n        android:layout_alignParentEnd="true"\n        android:layout_alignParentBottom="true"\n        android:layout_marginStart="42dp"\n        android:layout_marginTop="217dp"\n        android:layout_marginEnd="42dp"\n        android:layout_marginBottom="349dp"\n        android:valueFrom="0"\n        android:valueTo="300"\n        app:activeTrackColor="#ff4500"\n        app:inactiveTrackColor="#fbb999" >\n\n    </com.google.android.material.slider.Slider>\n</RelativeLayout>\n
Run Code Online (Sandbox Code Playgroud)\n

和firstPage.java 膨胀布局warming.XML 如下:

\n
public class firstPage extends Fragment {\n   @Nullable\n   @Override\n   public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\n      return inflater.inflate(R.layout.warming,container,false);\n   }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

使用以下代码,我想执行firstPage.java类:

\n
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new firstPage()).commit();\n
Run Code Online (Sandbox Code Playgroud)\n

怎么了?谁能帮我?我在StackOverflow和其他一些网站上搜索过这个问题,也有类似的问题,但没有人能解决我的问题。

\n

更新

\n

完整的堆栈跟踪在这里:

\n
04-16 12:45:37.991 18832-18832/? I/art: Late-enabling -Xcheck:jni\n04-16 12:45:37.991 18832-18832/? I/art: VMHOOK: rlim_cur : 0 pid:18832\n04-16 12:45:38.132 18832-18832/com.example.myapplication W/System: ClassLoader referenced unknown path: /data/app/com.example.myapplication-2/lib/arm\n04-16 12:45:38.443 18832-18832/com.example.myapplication W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable\n04-16 12:45:38.513 18832-18832/com.example.myapplication I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>\n04-16 12:45:38.513 18832-18832/com.example.myapplication I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>\n04-16 12:45:38.914 18832-18848/com.example.myapplication I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build: Nondeterministic_AU_msm8974_LA.BF.1.1.3__release_AU (I3fa967cfef)\n    OpenGL ES Shader Compiler Version: E031.28.00.02\n    Build Date: 09/29/15 Tue\n    Local Branch: mybranch14683032\n    Remote Branch: quic/master\n    Local Patches: NONE\n    Reconstruct Branch: NOTHING\n04-16 12:45:51.663 18832-18832/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main\n    Process: com.example.myapplication, PID: 18832\n    android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class com.google.android.material.slider.Slider\n        at android.view.LayoutInflater.inflate(LayoutInflater.java:539)\n        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)\n        at com.example.myapplication.firstPage.onCreateView(firstPage.java:16)\n        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)\n        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)\n        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)\n        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)\n        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)\n        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)\n        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)\n        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)\n        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)\n        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)\n        at android.os.Handler.handleCallback(Handler.java:739)\n        at android.os.Handler.dispatchMessage(Handler.java:95)\n        at android.os.Looper.loop(Looper.java:168)\n        at android.app.ActivityThread.main(ActivityThread.java:5885)\n        at java.lang.reflect.Method.invoke(Native Method)\n        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)\n     Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class com.google.android.material.slider.Slider\n        at android.view.LayoutInflater.createView(LayoutInflater.java:645)\n        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764)\n        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)\n        at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)\n        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)\n        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)\n        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)\xc2\xa0\n        at com.example.myapplication.firstPage.onCreateView(firstPage.java:16)\xc2\xa0\n        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)\xc2\xa0\n        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)\xc2\xa0\n        at android.os.Handler.handleCallback(Handler.java:739)\xc2\xa0\n        at android.os.Handler.dispatchMessage(Handler.java:95)\xc2\xa0\n        at android.os.Looper.loop(Looper.java:168)\xc2\xa0\n        at android.app.ActivityThread.main(ActivityThread.java:5885)\xc2\xa0\n        at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)\xc2\xa0\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)\xc2\xa0\n     Caused by: java.lang.reflect.InvocationTargetException\n        at java.lang.reflect.Constructor.newInstance(Native Method)\n        at android.view.LayoutInflater.createView(LayoutInflater.java:619)\n        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764)\xc2\xa0\n        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)\xc2\xa0\n        at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)\xc2\xa0\n        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)\xc2\xa0\n        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)\xc2\xa0\n        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)\xc2\xa0\n        at com.example.myapplication.firstPage.onCreateView(firstPage.java:16)\xc2\xa0\n        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)\xc2\xa0\n        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)\xc2\xa0\n        at android.os.Handler.handleCallback(Handler.java:739)\xc2\xa0\n        at android.os.Handler.dispatchMessage(Handler.java:95)\xc2\xa0\n        at android.os.Looper.loop(Looper.java:168)\xc2\xa0\n        at android.app.ActivityThread.main(ActivityThread.java:5885)\xc2\xa0\n        at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)\xc2\xa0\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)\xc2\xa0\n     Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 11: TypedValue{t=0x2/d=0x7f0300b4 a=3}\n        at android.content.res.TypedArray.getColorStateList(TypedArray.java:482)\n        at com.google.android.material.resources.MaterialResources.getColorStateList(MaterialResources.java:71)\n        at com.google.android.material.slider.Slider.processAttributes(Slider.java:365)\n        at com.google.android.material.slider.Slider.<init>(Slider.java:261)\n        at com.google.android.material.slider.Slider.<init>(Slider.java:252)\n        at java.lang.reflect.Constructor.newInstance(Native Method)\xc2\xa0\n        at android.view.LayoutInflater.createView(LayoutInflater.java:619)\xc2\xa0\n        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764)\xc2\xa0\n        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)\xc2\xa0\n        at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)\xc2\xa0\n        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)\xc2\xa0\n        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)\xc2\xa0\n        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)\xc2\xa0\n        at com.example.myapplication.firstPage.onCreateView(firstPage.java:16)\xc2\xa0\n        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)\xc2\xa0\n        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)\xc2\xa0\n        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)\xc2\xa0\n        at android.os.Handler.handleCallback(Handler.java:739)\xc2\xa0\n        at android.os.Handler.dispatchMessage(Handler.java:95)\xc2\xa0\n        at android.os.Looper.loop(Looper.java:168)\xc2\xa0\n        at android.app.ActivityThread.main(ActivityThread.java:5885)\xc2\xa0\n        at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)\xc2\xa0\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)\xc2\xa0\n04-16 12:45:53.565 18832-18832/com.example.myapplication D/Process: killProcess, pid=18832\n04-16 12:45:53.670 18832-18832/com.example.myapplication D/Process: com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:113 java.lang.ThreadGroup.uncaughtException:693 java.lang.ThreadGroup.uncaughtException:690 \n
Run Code Online (Sandbox Code Playgroud)\n

下面是Build.gradle代码:

\n
plugins {\n    id \'com.android.application\'\n}\n\nandroid {\n    compileSdkVersion 30\n\n    defaultConfig {\n        applicationId "com.example.myapplication"\n        minSdkVersion 22\n        targetSdkVersion 30\n        versionCode 1\n        versionName "1.0"\n\n        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile(\'proguard-android-optimize.txt\'), \'proguard-rules.pro\'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n\n    implementation \'androidx.appcompat:appcompat:1.2.0\'\n    implementation \'com.google.android.material:material:1.2.0-alpha02\'\n//    implementation \'com.google.android.material:material:1.3.0\'\n    implementation \'androidx.constraintlayout:constraintlayout:2.0.4\'\n//    implementation \'com.android.support:design:28.+\'\n//    implementation \'com.google.android.material:material:1.3.0\'\n    testImplementation \'junit:junit:4.+\'\n    androidTestImplementation \'androidx.test.ext:junit:1.1.2\'\n    androidTestImplementation \'androidx.test.espresso:espresso-core:3.3.0\'\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果你想问我“为什么不使用“material:1.3.0”版本”,我可以说,由于与导航抽屉布局相关的渲染问题,根据 StackOverFlow 中的一些说明,我更改了它到“材质:1.2.0-alpha02”并解决了渲染问题。\n我在另一篇文章中问了这个问题。您可以通过以下链接访问该问题:\n /sf/ask/4696716951/

\n

这是 Theme.xml:

\n
<resources xmlns:tools="http://schemas.android.com/tools">\n<!-- Base application theme. -->\n<style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">\n    <!-- Primary brand color. -->\n    <item name="colorPrimary">@color/purple_200</item>\n    <item name="colorPrimaryVariant">@color/purple_700</item>\n    <item name="colorOnPrimary">@color/black</item>\n    <!-- Secondary brand color. -->\n    <item name="colorSecondary">@color/teal_200</item>\n    <item name="colorSecondaryVariant">@color/teal_200</item>\n    <item name="colorOnSecondary">@color/black</item>\n    <!-- Status bar color. -->\n    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>\n    <!-- Customize your theme here. -->\n</style>\n
Run Code Online (Sandbox Code Playgroud)\n\n

小智 22

我创建了以下主题:

<style name="MyMaterialTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- Add attributes here -->
    <item name="colorPrimary">@color/itimalia_pink_califoria</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然后:

   <com.google.android.material.slider.Slider
    android:id="@+id/slider"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:theme="@style/MyMaterialTheme"/>
Run Code Online (Sandbox Code Playgroud)

它有效。


Gro*_*e60 8

如果您的应用程序主题不是源自 Material Design,您可以通过将以下主题分配给 Slider 小部件来避免运行时崩溃。

android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar"


moh*_*zza 6

好吧,经过大量搜索,最后我发现 android studio 中有一个名为 <androidx.appcompat.widget.AppCompatSeekBar> 的类似滑块对象。因此,您可以使用此对象代替“滑块”对象。所以这种方式不存在膨胀错误。


Wil*_*ute 6

这是因为您的基本应用程序主题不是材料主题的子主题。就我而言,我使用的是 Appcompat child 的应用程序主题。但我使用的视图继承了 MaterialComponenets 主题的所有内容。它抛出了错误。

应用主题:

<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
   ...
</style>
Run Code Online (Sandbox Code Playgroud)

所以我创建了另一种风格,

<style name="WD_Slider" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    ...
</style>
Run Code Online (Sandbox Code Playgroud)

并将滑块视图中的样式称为,

android:theme="@style/WD_Slider"
Run Code Online (Sandbox Code Playgroud)

通过这种方法,您可以使用不属于应用程序主题子级的任何视图,并在视图级别在 XML 中使用它时准确地覆盖所需的主题。