1

Мой вопрос таков: У меня есть некоторые макеты, которые по умолчанию имеют световой тематический смысл, означающий, что они на белом фоне. Мои эффекты Ripple выглядят отлично, а мои виджеты выглядят отлично.Моделирование стиля Android Android

Light Theme

Проблема возникает, когда я использую темную тему или черную тему. Мои виджеты становятся менее заметными, как и моя Ripple, которая должна быть белой для более темных тем. Ripple выглядит так, используя темную тему.

Dark Theme

На темной темой, ряби видна лишь отчасти, так как цвет фона # 303030, легче, чем рябь, которая # 000000. В идеале, пульсация должна быть белой. На черном тематическом макете рябь невидима, поскольку фон и рябь черные. я фактически устранил эту проблему с помощью

android:theme="ThemeOverlay.AppCompat.Dark" 

в моем макете. Если я использую это, рябь будет белой, а виджеты также станут более заметными. Проблема в том, что когда я нажимаю на виджет, как первый переключатель, приложение падает и оставляет меня с бессмысленной ошибкой.

EDIT: Ошибка заключается в следующем:

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) 

Как я могу тему мои виджеты и мой Ripple таким образом, чтобы отобразить их должным образом (как описано выше) на более темных тематических макетов без ошибок?

Спасибо!

+0

добавить журнал ошибок также –

+0

@ user3069305 спасибо, я добавил журнал. – 26hmkk

ответ

1

У меня была эта проблема с моей подклассовой деятельностью AppCompat. Я усердно искал и нашел следующий вопрос, опубликованный в трекере по проблеме Android: https://code.google.com/p/android/issues/detail?id=174871

В последнее время с надувным устройством AppCompat возникают некоторые проблемы, похоже, что обработчики OnClick, созданные из атрибутов OnClick в макете xml, неправильно обрабатывают ContextWrappers. Обход - удалить атрибуты OnClick из вашего xml и программно зарегистрировать прослушиватели OnClick в вашем коде. Я тщательно изучил все мои события кликов в коде и удалил все атрибуты onClick из виджетов в XML-файле макета. Это исправить.

Сегодня я обнаружил, что для своего приложения, которое использует темы AppCompat DayNight, гораздо проще исправить удаление «android: theme =« @ style/Theme.AppCompat.DayNight »из корневого макета. Теперь я могу вернуться к используя атрибуты onClick в xml-виджетах. Я не знаю, вызывает ли другие темы AppCompat одну и ту же проблему, но не удивлюсь. Моя основная деятельность задает тему приложения с помощью AppCompatDelegate.setDefaultNightMode. Надеюсь, это поможет, я был вне себя, когда я столкнулся с этим, мой код отлично поработал, пока я не протестировал в Marshmallow, и есть небольшая помощь, которую можно найти, поскольку вы можете видеть, что ваш вопрос остается без ответа в течение 6 месяцев.

 Смежные вопросы

  • Нет связанных вопросов^_^