我已经实现了自定义视图,表单字段MyFormField
,并且我希望在字段输入错误时显示错误指示符。当显示错误指示符时,我还应该滚动到字段,这当然是ScrollView的子项。
我已经尝试requestFocus()
但是这会产生不希望的效果,即为该字段的一个后代请求焦点,触发与该后代相关的其他一些行为。我想只进行滚动。
答案 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();
。