requestFocus()返回false

Nar*_*uto 4 android window-managers setfocus

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

我究竟做错了什么?

在我在膨胀视图上调用requestFocus之前,我从按钮(用于充气新视图)中清除了焦点.

问候

iwi*_*not 7

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

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

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

View view;
view.setFocusable(true);
view.setFocusableInTouchMode(true);
view.requestFocus();
Run Code Online (Sandbox Code Playgroud)

  • 当它返回 false 时,我会添加另一种情况,这发生在我身上。当您想为 0 维的 EditText 请求焦点时 (3认同)

Bia*_* D. 6

在通货膨胀时调用 requestFocus() 还为时过早,尝试调用如下内容:

button.post(new Runnable(){
    @Override 
    public void run(){
       inflatedView.requestFocus();
    }
});
Run Code Online (Sandbox Code Playgroud)

当主线程完成其工作后,它将将此调用安排到主队列(因此​​将来会调用它)。

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