Android RequestFocus()效果不佳

Swa*_*yam 4 android focus android-edittext

我希望我的应用程序中的EditText在应用程序启动时默认使用光标.我试过用

<EditText
    android:id="@+id/idInput"
    android:layout_width="480dp"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:ems="10" >

    <requestFocus />
</EditText>
Run Code Online (Sandbox Code Playgroud)

并且

userIdInput = (EditText)findViewById(R.id.idInput);
userIdInput.setFocusable(true);
userIdInput.setFocusableInTouchMode(true);
userIdInput.requestFocus();
Run Code Online (Sandbox Code Playgroud)

但似乎没有任何效果.当应用程序启动时,光标无处可见,我必须手动单击EditText以使光标出现在其上.

哪里可能出错?

顺便说一句,我正在开发Android 4.0.3平板电脑.

Vip*_*hah 18

试试这个

userIdInput = (EditText)findViewById(R.id.idInput);

userIdInput.post(new Runnable() 
    {
      public void run() 
       {
        userIdInput .requestFocus();
       }
    });
Run Code Online (Sandbox Code Playgroud)

  • 谁能解释为什么这有用和/或必要? (8认同)
  • 这件事隐藏在Android活动生命周期方法和时间的编排中.onResume是在UI可见之前运行的最后一个,但是当onResume完成时,UI仍然没有准备好 - 它已准备好在事件队列中呈现.将requestFocus放在其中一个生命周期方法中,使其在UI准备就绪之前运行.如果使用view.post(...),则runnable将放入事件队列中,该队列保证在调用它的生命周期方法之后运行.因此,请确保view.post(new Runnable()....)....在onResume中,然后您的应用程序将正确运行. (4认同)
  • 这有效!但是,有人解释为什么请. (2认同)