Для активности в библиотеке Android требуется тема MaterialComponents, не затрагивая родительское приложение - PullRequest
0 голосов
/ 06 августа 2020

Я разработал библиотеку 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>
...