【问题标题】:Android Layout Theme StylingAndroid 布局主题样式
【发布时间】:2015-12-30 04:43:15
【问题描述】:

我的问题如下: 我有一些默认为浅色主题的布局,这意味着它们具有白色背景。我的涟漪效果看起来不错,我的小部件看起来也不错。

当我使用深色主题或黑色主题时会出现问题。我的小部件变得不那么明显了,我的波纹也变得不那么明显了,对于较暗的主题应该是白色的。使用深色主题的波纹看起来像这样。

在深色主题中,涟漪仅部分可见,因为背景颜色为 #303030,比 #000000 的涟漪浅。理想情况下,波纹应该是白色的。在黑色主题布局中,波纹是不可见的,因为背景和波纹都是黑色的。 我实际上已经通过使用解决了这个问题

android:theme="ThemeOverlay.AppCompat.Dark" 

在我的布局中。如果我使用它,波纹是白色的,小部件也更明显。问题是当我单击第一个开关之类的小部件时,应用程序崩溃并给我留下一个无意义的错误。

编辑: 错误如下:

12-29 23:57:39.801 13055-13055/com.company.app E/AndroidRuntime: FATAL EXCEPTION: main
                                                           Process: com.company.app, PID: 13055
                                                           java.lang.IllegalArgumentException: Expected receiver of type com.company.app.SettingsActivity, but got android.view.ContextThemeWrapper
                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                               at android.view.View$DeclaredOnClickListener.onClick(View.java:4453)
                                                               at android.view.View.performClick(View.java:5204)
                                                               at android.widget.CompoundButton.performClick(CompoundButton.java:122)
                                                               at android.view.View$PerformClick.run(View.java:21153)
                                                               at android.os.Handler.handleCallback(Handler.java:739)
                                                               at android.os.Handler.dispatchMessage(Handler.java:95)
                                                               at android.os.Looper.loop(Looper.java:148)
                                                               at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

如何以这样一种方式为我的小部件和我的波纹设置主题,以便在较暗的主题布局上正确显示它们(如上所述)而不会出错?

谢谢!

【问题讨论】:

  • @user3069305 谢谢,我已经添加了日志。

标签: android android-layout material-design android-theme ripple


【解决方案1】:

我的 AppCompat 子类活动遇到了这个问题。我用心搜索,在 Android 的问题跟踪器中发现了以下问题:https://code.google.com/p/android/issues/detail?id=174871

AppCompat 的充气器最近似乎出现了一些问题,从布局 xml 中的 OnClick 属性生成的 OnClick 处理程序似乎没有正确处理 ContextWrappers。解决方法是从您的 xml 中删除 OnClick 属性,并在您的代码中以编程方式注册 OnClick 侦听器。我在代码中明确地注册了所有点击事件,并从布局的 xml 文件中的小部件中删除了所有 onClick 属性。那确实解决了它。

今天我发现我自己的应用程序使用 AppCompat DayNight 主题,一个更简单的解决方法是从根布局中删除“android:theme="@style/Theme.AppCompat.DayNight"。我现在可以回去使用小部件的 xml 中的 onClick 属性。我不知道其他 AppCompat 主题是否会导致同样的问题,但不会感到惊讶。我的主要活动使用 AppCompatDelegate.setDefaultNightMode 设置应用程序的主题。希望这会有所帮助,我跑的时候很生气对此,我的代码运行良好,直到我在 Marshmallow 中进行了测试,并且您可以看到您的问题在 6 个月内没有得到解答,因此几乎找不到任何帮助。

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2014-12-08
    • 1970-01-01
    • 2011-11-15
    相关资源
    最近更新 更多