2015-12-30 105 views
1

我的問題如下: 我有一些佈局,默認情況下輕的主題意味着他們是白色的背景。我的漣漪效果看起來很好,我的小工具看起來很好。Android佈局主題造型

Light Theme

產生的問題是,當我用我的黑暗的主題或黑色主題。我的Widget變得不那麼明顯,我的Ripple對於較暗的主題應該是白色的。漣漪像這樣使用黑暗的主題。

Dark Theme

在黑暗的主題,紋波只看到了一部分,因爲背景的顏色爲#303030,比這是#000000紋波輕。理想情況下,波紋應該是白色的。在黑色主題佈局中,由於背景和紋波均爲黑色,紋波不可見。 我實際上已經通過使用

android:theme="ThemeOverlay.AppCompat.Dark" 

在我的佈局中解決了這個問題。如果我使用這個紋波是白色的,Widgets也更加明顯。問題是,當我點擊像第一個開關那樣的小部件時,應用程序崩潰並給我留下一個無意義的錯誤。

編輯: 的錯誤如下:

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) 

我如何主題我的窗口小部件和我的紋波以這樣的方式來正確顯示他們在黑暗的主題佈局(如上所述)沒有錯誤?

謝謝!

+0

添加錯誤日誌也 –

+0

@ user3069305謝謝,我已經添加日誌。 – 26hmkk

回答

1

我有我的AppCompat子類活動的這個問題。我搜索的努力,發現張貼在Android的問題跟蹤了以下問題:https://code.google.com/p/android/issues/detail?id=174871

似乎有一些問題,最近與程序兼容性的吹氣,看來onclick處理產生的的OnClick佈局XML屬性的不正確地處理ContextWrappers。解決方法是從您的xml中刪除OnClick屬性,並在您的代碼中以編程方式註冊OnClick偵聽器。我努力在代碼中顯式註冊所有的點擊事件,並從佈局的xml文件中的小部件中刪除所有onClick屬性。那確實解決了它。

今天我發現我的應用程序使用AppCompat DayNight主題,一個更簡單的解決方法是從根佈局中刪除「android:theme =」@ style/Theme.AppCompat.DayNight「。現在我可以回到在widget的xml中使用onClick屬性我不知道其他的AppCompat主題是否會導致同樣的問題,但不會感到驚訝,我的主要活動是使用AppCompatDelegate.setDefaultNightMode設置應用程序的主題,希望這有助於我在我身邊時碰到這個,我的代碼工作很好,直到我在棉花糖測試,並沒有什麼幫助被發現,因爲你可以看到與你的問題未得到解答6個月。