android 焦点丢失,android – 当片段位于另一个片段之上时焦点丢失

我有完全相同的问题,我发现这个副本:

Disable focus on fragment

接受的解决方案对我有用.

这是我到目前为止的实现版本(可以改进):

abstract class BaseFragment<....> : Fragment() {

private val screenFocusHelper = ScreenFocusHelper()

fun enableFocus() {

if (view != null) {

// Enable focus

screenFocusHelper.setEnableView(view as ViewGroup,true)

// Clear focusable elements

screenFocusHelper.focusableViews.clear()

}

childFragmentManager.fragments.forEach {

if (it is BaseFragment) {

it.enableFocus()

}

}

}

fun disableFocus() {

if (view != null) {

// Store last focused element

screenFocusHelper.previousFocus = view?.findFocus()

// Clear current focus

view!!.clearFocus()

// Disable focus

screenFocusHelper.setEnableView(view as ViewGroup,false)

}

childFragmentManager.fragments.forEach {

if (it is BaseFragment) {

it.disableFocus()

}

}

}

}

class ScreenFocusHelper {

var previousFocus: View? = null

val focusableViews: MutableList = mutableListOf()

fun setEnableView(viewGroup: ViewGroup,isEnabled: Boolean) {

findFocusableViews(viewGroup)

for (view in focusableViews) {

view.isEnabled = isEnabled

view.isFocusable = isEnabled

}

}

private fun findFocusableViews(viewGroup: ViewGroup) {

val childCount = viewGroup.childCount

for (i in 0 until childCount) {

val view = viewGroup.getChildAt(i)

if (view.isFocusable) {

if (!focusableViews.contains(view)) {

focusableViews += view

}

}

if (view is ViewGroup) {

findFocusableViews(view)

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值