4

我有一个HorizontalScrollView包含 a LinearLayout,它又包含几个FrameLayouts。每个都FrameLayout包含一个Fragment. 现在我正在尝试获取视图,即FrameLayout当前可见或在HorizontalScrollView. 一旦我获得焦点视图,我就可以在LinearLayout.

我尝试了以下方法,但没有任何效果:

  • Horizo​​ntalScrollView.findFocus() - 返回 null
  • LinearLayout.findFocus() - 返回 null
  • LinearLayout.getFocusedChild() - 返回 null
  • FrameLayoutFrameLayout.hasFocus() - 为所有s返回 false

LinearLayout我还可以通过根据每个孩子的当前 X 位置进行计算来尝试找出哪个孩子有焦点。但是,调用getX()每个孩子总是返回“0.0”。

有谁知道如何使视图成为焦点(或者更好的是它在 中的索引LinearLayout)?

4

1 回答 1

7

使用这个问题的答案:android-how-to-check-if-a-view-inside-of-scrollview-is-visible我想出了以下解决方案:

Rect scrollBounds = new Rect();
MyHorizontalScrollView.getDrawingRect(scrollBounds);
Rect childBounds = new Rect();      
for (int i = 0; i < MyLinearLayout.getChildCount(); i++) {
    MyLinearLayout.getChildAt(i).getHitRect(childBounds);
    if(scrollBounds.contains(childBounds)) {
        IndexOfVisibleChild = i;
        return;
    }
}
于 2012-04-16T10:44:23.320 回答