Похоже, что команда Android действительно изменила это поведение в Android 23 - Marshmallow. Если вы посмотрите на исходный код View.java
в Android 23, вы увидите, что они добавили вызов onVisibilityChanged
внутри dispatchAttachedToWindow
.
Вот коммит к AOSP, где произошло это изменение .
Вот разница для этого изменения .
Учитывая, что вы не можете опубликовать свой код, я не могу предложить лучшего решения, чем указать вам на изменение.
Если вы пытаетесь отслеживать прикрепления вида к окну, я бы предложил onAttachedToWindow
API.
Обратите внимание, что метод, который вызывает onVisibilityChanged
в Android 23, скорее всего, dispatchAttachedToWindow
. Этот метод также вызывает onAttachedToWindow
, так что вы можете теоретически прослушать это и проверить видимость вручную.
// Override inside your custom view
override fun onAttachedToWindow() {
super.onAttachedToWindow()
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
// Check for visibility here, but note that onVisibilityChanged initially gets called with View.GONE
// Unless the view is inside of a ViewGroup. See the source code for ViewRootImpl.java for more details.
}
}
В противном случае вам потребуется специальный случай для вашей логики для Android 22 и ниже, чтобы вы слушали onWindowVisibilityChanged
more вместо onVisibilityChanged
.