moh*_*zza 12 java xml android fragment android-inflate
我想膨胀包含单个搜索栏的布局。通过这种方式,我创建了一个扩展片段类的java类,然后我膨胀了布局。但出现以下错误:
\n二进制 XML 文件第 #9 行:二进制 XML 文件第 #9 行:膨胀类 com.google.android.material.slider.Slider 时出错
\nwarming.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 如下:
\npublic 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类:
\ngetSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new firstPage()).commit();\n
Run Code Online (Sandbox Code Playgroud)\n怎么了?谁能帮我?我在StackOverflow和其他一些网站上搜索过这个问题,也有类似的问题,但没有人能解决我的问题。
\n更新
\n完整的堆栈跟踪在这里:
\n04-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代码:
\nplugins {\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)
它有效。
如果您的应用程序主题不是源自 Material Design,您可以通过将以下主题分配给 Slider 小部件来避免运行时崩溃。
android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar"
好吧,经过大量搜索,最后我发现 android studio 中有一个名为 <androidx.appcompat.widget.AppCompatSeekBar> 的类似滑块对象。因此,您可以使用此对象代替“滑块”对象。所以这种方式不存在膨胀错误。
这是因为您的基本应用程序主题不是材料主题的子主题。就我而言,我使用的是 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 中使用它时准确地覆盖所需的主题。
归档时间: |
|
查看次数: |
8639 次 |
最近记录: |