2012-09-04 38 views
1

當我的活動開始時,我的編輯文本會自動獲得焦點,但軟鍵盤不會顯示。此外,當我在視圖上以編程方式呼叫.requestFocus()時,它獲得焦點,但是軟鍵盤不再出現。一個視圖的例子如下:當視圖獲得專注於android的時候,如何顯示軟鍵盤?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/LinearLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:padding="10dp"> 

<EditText 
    android:id="@+id/editTextTransactionName" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:hint="@string/edittext_description" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:imeOptions="actionNext" 
    android:inputType="text"/> 
</LinearLayout> 

軟鍵盤似乎只出現,如果我點擊。是否有這種默認行爲的原因?當打開一個用作表單的活動時,我會直觀地看到鍵盤出現,所以你可以立即輸入數據。

回答

2

考慮閱讀本: Android Actionbar Tabs and Keyboard Focus

requestFocus的是極不可靠。

顯然這不是默認行爲。 如果你真的想讓鍵盤自動出現,在你的EditText裏面模擬一個「tap」,這是我的工作原理(由於requestFocus的行爲不可靠,這比安裝showSoftInput更安全,而且你不需要微調鍵盤):

EditText tv = (EditText)findViewById(R.id.editText); 
tv.post(new Runnable() { 

      @Override 
      public void run() { 
       Log.d("RUN", "requesting focus in runnable"); 
       tv.requestFocusFromTouch(); 
       tv.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , tv.getWidth(), tv.getHeight(), 0)); 
       tv.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , tv.getWidth(), tv.getHeight(), 0)); 
      } 
     }); 

我覺得後面的鍵盤不開放的原因是,用戶必須有機會決定從哪裏開始第一次編輯之前看到整個窗口。

相關問題