QMUI_Android icon indicating copy to clipboard operation
QMUI_Android copied to clipboard

vivo x9 Android 版本7.1.2 换肤不生效

Open byteMaxdroid opened this issue 5 years ago • 6 comments

运行环境

设备型号:如:vivo x9 设备系统版本:如 7.1.2

  • [x] QMUI Android 版本:2.0.0 alpha 10 在某些型号上Qmui的皮肤功能报错。 Log.e===QMUISkin===Failed to inflate view androidx.viewpager.widget.ViewPager; error: Binary XML file line #64: Error inflating class Log.e===QMUISkin===Failed to inflate view com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout; error: Binary XML file line #89: Error inflating class Log.e===QMUISkin===Failed to inflate view LinearLayout; error: Binary XML file line #129: Error inflating class

导致切换皮肤时无法全部生效,或者fragment 当中的部分颜色没有被替换 如QmuiDemo 切换夜间模式,会导致 homeFramgent 当中的图标颜色无法展示

byteMaxdroid avatar Jun 12 '20 02:06 byteMaxdroid

微信图片_20200612105844 如图所示,这个是夜间模式当中的图标。。

byteMaxdroid avatar Jun 12 '20 03:06 byteMaxdroid

我查查

cgspine avatar Jun 13 '20 15:06 cgspine

运行环境 设备型号:Mi-4c 设备系统版本:7.0

小米手机也会有类反射得错误 比较奇怪,不知道是不是系统魔改了什么(Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Looper android.content.Context.getMainLooper()' on a null object reference) 但是在另外一台小米设备上就是好的

2020-08-10 18:35:31.774 18150-18150/com.cci.scaffold W/System.err: android.view.InflateException: Binary XML file line #66: Error inflating class 2020-08-10 18:35:31.775 18150-18150/com.cci.scaffold W/System.err: Caused by: java.lang.reflect.InvocationTargetException 2020-08-10 18:35:31.775 18150-18150/com.cci.scaffold W/System.err: at java.lang.reflect.Constructor.newInstance0(Native Method) 2020-08-10 18:35:31.775 18150-18150/com.cci.scaffold W/System.err: at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 2020-08-10 18:35:31.775 18150-18150/com.cci.scaffold W/System.err: at android.view.LayoutInflater.createView(LayoutInflater.java:652) 2020-08-10 18:35:31.775 18150-18150/com.cci.scaffold W/System.err: at com.cci.skin.SkinLayoutInflaterFactory.onCreateView(SkinLayoutInflaterFactory.kt:64) 2020-08-10 18:35:31.775 18150-18150/com.cci.scaffold W/System.err: at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:192) 2020-08-10 18:35:31.775 18150-18150/com.cci.scaffold W/System.err: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794) 2020-08-10 18:35:31.775 18150-18150/com.cci.scaffold W/System.err: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:752) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at android.view.LayoutInflater.rInflate(LayoutInflater.java:883) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:846) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at android.view.LayoutInflater.inflate(LayoutInflater.java:522) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at android.view.LayoutInflater.inflate(LayoutInflater.java:430) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at com.cci.scaffold.ui.contacts.ContactsFragment.onCreateView(ContactsFragment.kt:46) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849) 2020-08-10 18:35:31.776 18150-18150/com.cci.scaffold W/System.err: at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413) 2020-08-10 18:35:31.777 18150-18150/com.cci.scaffold W/System.err: at android.os.Handler.handleCallback(Handler.java:754) 2020-08-10 18:35:31.777 18150-18150/com.cci.scaffold W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95) 2020-08-10 18:35:31.777 18150-18150/com.cci.scaffold W/System.err: at android.os.Looper.loop(Looper.java:163) 2020-08-10 18:35:31.777 18150-18150/com.cci.scaffold W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6358) 2020-08-10 18:35:31.777 18150-18150/com.cci.scaffold W/System.err: at java.lang.reflect.Method.invoke(Native Method) 2020-08-10 18:35:31.777 18150-18150/com.cci.scaffold W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880) 2020-08-10 18:35:31.777 18150-18150/com.cci.scaffold W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Looper android.content.Context.getMainLooper()' on a null object reference 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at miui.util.AttributeResolver.cg(SourceFile:35) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at miui.util.AttributeResolver.resolveInt(SourceFile:145) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at miui.util.AttributeResolver.isUsingMiuiTheme(SourceFile:179) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at miui.os.Environment.isUsingMiui(SourceFile:108) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at android.view.ViewConfigurationInjector.get(ViewConfigurationInjector.java:18) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at android.view.ViewConfiguration.get(ViewConfiguration.java:369) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at android.view.View.(View.java:4006) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at android.view.View.(View.java:4126) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at android.view.View.(View.java:4089) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at com.cci.core.widget.ContactsIndexView.(ContactsIndexView.kt:22) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: at com.cci.core.widget.ContactsIndexView.(ContactsIndexView.kt:23) 2020-08-10 18:35:31.778 18150-18150/com.cci.scaffold W/System.err: ... 27 more

pijie avatar Aug 10 '20 11:08 pijie

Demo 在小米手机上运行也会报错: 2020-08-10 19:35:48.974 19037-19037/com.qmuiteam.qmuidemo E/QMUISkin: Failed to inflate view com.qmuiteam.qmui.widget.QMUIWindowInsetLayout; error: Binary XML file line #17: Error inflating class com.qmuiteam.qmui.widget.QMUIWindowInsetLayout 2020-08-10 19:35:48.977 19037-19037/com.qmuiteam.qmuidemo E/QMUISkin: Failed to inflate view com.qmuiteam.qmui.widget.QMUIViewPager; error: Binary XML file line #25: Error inflating class com.qmuiteam.qmui.widget.QMUIViewPager 2020-08-10 19:35:48.981 19037-19037/com.qmuiteam.qmuidemo E/QMUISkin: Failed to inflate view com.qmuiteam.qmui.widget.tab.QMUITabSegment; error: Binary XML file line #31: Error inflating class com.qmuiteam.qmui.widget.tab.QMUITabSegment 2020-08-10 19:35:49.006 19037-19037/com.qmuiteam.qmuidemo E/QMUISkin: Failed to inflate view androidx.recyclerview.widget.RecyclerView; error: Binary XML file line #22: Error inflating class androidx.recyclerview.widget.RecyclerView 2020-08-10 19:35:49.010 19037-19037/com.qmuiteam.qmuidemo E/QMUISkin: Failed to inflate view com.qmuiteam.qmui.widget.QMUITopBarLayout; error: Binary XML file line #29: Error inflating class com.qmuiteam.qmui.widget.QMUITopBarLayout 2020-08-10 19:35:49.033 19037-19037/com.qmuiteam.qmuidemo E/QMUISkin: Failed to inflate view androidx.recyclerview.widget.RecyclerView; error: Binary XML file line #22: Error inflating class 2020-08-10 19:35:49.035 19037-19037/com.qmuiteam.qmuidemo E/QMUISkin: Failed to inflate view com.qmuiteam.qmui.widget.QMUITopBarLayout; error: Binary XML file line #29: Error inflating class 2020-08-10 19:35:49.043 19037-19037/com.qmuiteam.qmuidemo E/QMUISkin: Failed to inflate view androidx.recyclerview.widget.RecyclerView; error: Binary XML file line #22: Error inflating class 2020-08-10 19:35:49.045 19037-19037/com.qmuiteam.qmuidemo E/QMUISkin: Failed to inflate view com.qmuiteam.qmui.widget.QMUITopBarLayout; error: Binary XML file line #29: Error inflating class

pijie avatar Aug 10 '20 11:08 pijie

我在 7.0上 activity 可以换肤,但是 fragment中 LinearLayout 等viewgroup 不可以换,后边用java的方式 不用XML的方式解决了!可以试试!7.0 以上版本是可以的!

cuilingling avatar Feb 18 '22 02:02 cuilingling

anroid8.0 兜了底 。因为android7.1 的代码逻辑是使用了中间类代理Factory2的话里面有一个保存view构造函数的参数的Object[]里的第一个参数也就是context会没有赋值。8.0后面就修复了这个问题https://android.googlesource.com/platform/frameworks/base/+/9a376bcd4576029a8d0ad03254a6240cd1422c2e%5E%21/#F0 可以在LayoutInflater.Factory2实现类里加入如下兼容代码(伪代码)

if (Build.VERSION.SDK_INT <= 25) { Field constructorArgsField = LayoutInflater.class.getDeclaredField("mConstructorArgs"); Object[] originArgs = (Object[]) constructorArgsField.get(Object[].class); constructorArgsField.setAccessible(true); if (originArgs == null || originArgs[0] == null) { Object[] constructorArgs = new Object[2]; constructorArgs[0] = context; constructorArgsField.set(Object[].class, constructorArgs); } }

FangJoker avatar May 17 '22 12:05 FangJoker