requestFocus()返回false

时间:2014-01-02 19:27:35

标签: android setfocus window-managers

按下按钮时,我正在给视图充气。膨胀的视图就像一个对话框,但是当我尝试将焦点放在requestFocus()的对话框上时,requestFocus()返回false表示我没有关注视图,但是当我手动点击膨胀的视图时,它收到了重点。

我做错了什么?

在我在膨胀的视图上调用requestFocus之前,我从按钮(用于夸大新视图)中清除了焦点。

此致

2 个答案:

答案 0 :(得分:6)

View.requestFocus()方法返回false(未成功请求焦点)的可能原因是由于以下原因:

  

"如果视图不可聚焦(isFocusable()返回false),或者如果它是可聚焦的并且在设备处于同一状态时它在触摸模式下不可聚焦(isFocusableInTouchMode()),则视图实际上不会聚焦触摸模式。"

检查isFocusable()isFocusableInTouchMode()是否都返回true。如果没有,您可以使用setFocusable()setFocusableInTouchMethod()强制它们,如下所示。

View view;
view.setFocusable(true);
view.setFocusableInTouchMode(true);
view.requestFocus();

答案 1 :(得分:1)

在通货膨胀时调用requestFocus()为时过早,尝试调用类似:

button.post(new Runnable(){
    @Override 
    public void run(){
       inflatedView.requestFocus();
    }
});
在主线程完成其工作之后,

会将此调用安排到主队列(以便将来调用)。

此外,没有必要在按钮本身上调用clearFocus();(实际上,我不推荐它,因为框架会尝试将焦点放在其他人身上,并且您已经知道应该是什么视图聚焦)。