滚动到自定义Android视图

时间:2014-01-10 16:15:43

标签: android

我已经实现了自定义视图,表单字段MyFormField,并且我希望在字段输入错误时显示错误指示符。当显示错误指示符时,我还应该滚动到字段,这当然是ScrollView的子项。

我已经尝试requestFocus()但是这会产生不希望的效果,即为该字段的一个后代请求焦点,触发与该后代相关的其他一些行为。我想只进行滚动。

1 个答案:

答案 0 :(得分:2)

// field is an instance of MyFormField
Rect rect = new Rect(field.getLeft(), field.getTop(), field.getRight(), field.getBottom());
field.requestRectangleOnScreen(rect);

方法requestRectangleOnScreen的目的正是“滚动到此视图”。来自API Docs

  

请求在屏幕上显示此视图的矩形,必要时滚动就足够了。

     

如果一个视图保留了一些关于其内容的哪个部分有趣的概念,那么它应该调用它。例如,文本编辑视图应在光标移动时调用它。

根据您的MyFormField,您可能希望requestRectangleOnScreen代表后代,如下所示:

public class MyFormField extends View {
    private View descendant;

    // ...

    public boolean requestOnScreen() {
        Rect rect = new Rect(descendant.getLeft(), descendant.getTop(), descendant.getRight(), descendant.getBottom());
        return requestRectangleOnScreen(rect);
    }
}

然后只需致电field.requestOnScreen();