Я разработал библиотеку Android, которая включает Activity для родительского приложения. Activity захватывает только основной цвет родительского приложения для тематики:
<item name="android:textColor">?attr/colorAccent</item>
Теперь я хочу добавить кнопку MaterialComponent в Activity, но родительскому приложению придется изменить тему своего приложения на Theme.MaterialComponents .. ..согласно Правилам по материалам . Реализуя это в моем собственном примере приложения, я видел, что, если родительское приложение этого не делает, приложение будет сканировать sh.
2020-08-05 16:46:32.266 6494-6494/... E/AndroidRuntime: FATAL EXCEPTION: main
Process: ..., PID: 6494
java.lang.RuntimeException: Unable to start activity ComponentInfo{.../....controllers.InCallActivity}: android.view.InflateException: Binary XML file line #274: Binary XML file line #163: Error inflating class com.google.android.material.button.MaterialButton
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: android.view.InflateException: Binary XML file line #274: Binary XML file line #163: Error inflating class com.google.android.material.button.MaterialButton
Caused by: android.view.InflateException: Binary XML file line #163: Error inflating class com.google.android.material.button.MaterialButton
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at android.view.LayoutInflater.createView(LayoutInflater.java:647)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:995)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:859)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
at ....controllers.InCallActivityBase.onCreate(InCallActivityBase.java:43)
at ....controllers.InCallActivity.onCreate(InCallActivity.java:214)
at android.app.Activity.performCreate(Activity.java:7183)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.IllegalArgumentException: This component requires that you specify a valid TextAppearance attribute. Update your app theme to inherit from Theme.MaterialComponents (or a descendant).
at com.google.android.material.internal.ThemeEnforcement.checkTextAppearance(ThemeEnforcement.java:170)
at com.google.android.material.internal.ThemeEnforcement.obtainStyledAttributes(ThemeEnforcement.java:75)
2020-08-05 16: 46: 32.266 6494-6494 / ... E / AndroidRuntime: в com.google. android .material.button.MaterialButton. (MaterialButton. java: 140) в com.google. android .material.button.MaterialButton. (MaterialButton. java: 133) ... еще 31
Итак, как я могу использовать MaterialComponents в моей библиотеке, не заставляя всех моих пользователей обновлять собственные темы приложений?
I Я пытался установить собственную тему только для моей Activity в библиотеке AndroidManifest. xml, но это вызвало еще больше проблем.
<activity
android:name=".controllers.InCallActivity"
android:theme="@style/MyCustomMaterialTheme"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="userLandscape" />
И тема:
<style name="MyCustomMaterialTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorAccent">attr/colorAccent</item>
</style>