Я получаю странное поведение радиокнопки в Oreo 8.0.1
, радиокнопка частично выбрана, что уже обсуждалось на Stackoverflow
здесь и здесь.
На изображении выше изображение First Radio Button
выделено частично, это происходит только тогда, когда мы установили переключатель programmatically
Это, я думаю, ошибка анимации в соответствии с этим ответ и исправлено вызовом jumpDrawablesToCurrentState()
, но теперь я получаю partially unChecked
при изменении состояния только programmatically
в первый раз, посмотрите Здесь выбрана первая радиокнопка, но вторая радиокнопка все еще частично отмечена.
Радиокнопка частично отключена в Oreo
Ответы (1)
Да, это похоже на ошибку анимации, но вы должны обновить свой макет, используя методы invalidate и requestLayout.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
view.invalidate();
view.requestLayout();
}
person
Bilal uddin
schedule
18.04.2018
Я думаю, что
requestLayout
добавляет ненужные затраты на производительность, поскольку макет не изменился. Почему бы вам не объяснить, что делает каждый метод и почему мы должны его вызывать?
- person Eugen Pechanec; 18.04.2018
@Eugen Pechane спасибо, есть ли лучшее решение, чтобы избежать таких проблем? Я получаю это только в
Oreo 8.0.1
, но это решает мою проблему.
- person Hussain Sherwani; 18.04.2018
@Eugen Pechanec Я также столкнулся с той же проблемой только на устройстве Oreo, и эта строка кода помогает мне исправить это, если у вас есть лучшее решение, дайте мне знать
- person Bilal uddin; 18.04.2018
Я предполагаю, что
invalidate
будет достаточно. invalidate
вызывает перерисовку, чего должно быть достаточно, потому что нарушается только альфа-канал. requestLayout
заставляет пересчитывать позицию всей иерархии компоновки, что является пустой тратой ресурсов ЦП, потому что позиция правильная. Я хочу, чтобы вы знали, что делаете. В своих ответах объясните, что делает ваш код, чтобы другие люди тоже знали об этом. @HussainSherwani Не просто слепо копируйте и вставляйте что-то, не понимая.
- person Eugen Pechanec; 18.04.2018
@Eugen Pechanec Спасибо за это, на самом деле я не копирую код вслепую, я пробовал это только с
invalidate
, но все же столкнулся с проблемой, пожалуйста, проверьте ..https://stackoverflow.com/a/35281876/3026578
, также я уже исправил эту проблему до этого ответа ... Ура
- person Hussain Sherwani; 18.04.2018
@HussainSherwani Спасибо за эту ссылку, да, я тоже ожидал чего-то подобного в этом ответе. По ссылке написано:
If you are not doing anything to your view that would change its size, then you do not have to call requestLayout().
так что теперь вопрос, почему ваш кейс не работает без requestLayout
...
- person Eugen Pechanec; 18.04.2018
Спасибо, на самом деле мой
Radio Button
не находится в RadioGroup
, я обрабатывал их вручную, в некоторых ситуациях я показываю three button
в некоторых условиях я также показываю two
и one
в зависимости от моей ситуации. На самом деле это ошибка анимации, она возникла в конкретном сценарии только в первый раз, второй раз, когда я повторяю тот же сценарий, этого не произойдет, я тоже debugged
этого. При отладке я получил mCheked = false
для второй кнопки. но он отображается как частично проверенный. похоже на баг анимации. Ваше здоровье
- person Hussain Sherwani; 18.04.2018