2014-03-06 85 views
1

我有一个EditText和一个CountDownTimer。通常情况下,如果你用EditText开始一个活动,EditText被激活并且键盘显示出来。但我希望活动启动,计时器关闭,然后键盘自动显示。 我该怎么做?如何在延迟时间后激活(打开键盘)EditText?

new CountDownTimer(5000, 1000) { 

     public void onTick(long millisUntilFinished) { 
      //Do Something 
     } 

     public void onFinish() { 
      //Keyboard pop up 
     } 
     }.start(); 
+0

让我错了,如果我错了,你想,当活动开始,你不想要专注编辑文本和你的后计时器下降,然后你想显示键盘。所以你可以做的是,当活动负载使你编辑文本可聚焦的假,并在计时器任务后使其可聚焦真正和请求焦点到你的编辑文本。 –

回答

6

我建议使用HandlerpostDelayed(...)方法及您指定的延迟时间后,打开键盘:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    final EditText et= (EditText) findViewById(R.id.editText1); 
    Handler h = new Handler(); 

    h.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT); 
     } 

    }, 5000); // delay in milliseconds 
} 

您所需的延迟时间后,这将打开键盘。

这里我.xml文件:(请注意<requestFocos />标签)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/textView1" 
     android:layout_marginTop="30dp" 
     android:ems="10" > 
     <requestFocus /> 
    </EditText> 

</RelativeLayout> 
+0

两者都不适合我。什么都没有出现。或者它是最终的EditText? – L3n95

+0

它需要是final或成员变量,否则在run()方法内不可见。 –

+0

还没有显示出来。我第一次(在onCreate)必须删除焦点或禁用EditText? – L3n95