想必還滿常碰到一個 Activity 中,擺幾個 EditText 讓人輸入帳密來送出的表單吧!然而,當送出表單成功後,偶時會很偷懶直接把 mEditText.setText("Info") 且 mEditText.setEnable(false) 來處理,想說這樣又可以重複利用 XD 結果就會碰到開啟 Activity 後,自動 focus 在 EditText 並彈跳出 keyboard 的窘境了。如果動態進行 mEditText.setFocusable(false) 的方式,的確可以避開 focus 的問題,但很奇妙地再動態 mEditText.setFocusable(true) 時,卻會出錯而無法點選該欄位 Orz
最後,找到一些很折衷的辦法...那就是在 EditText 前,先讓某個處的 layout 可以被 focusable 就好 XD 這樣的解法真的是 It just works! 的狀態。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center_vertical">
<TextView
android:layout_margin="5dp"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="@string/title_account"
android:textAppearance="?android:attr/textAppearanceLarge">
</TextView>
<EditText
android:id="@+id/edittext_account"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/account_hint"
android:ems="10" >
</EditText>
</LinearLayout>
<LinearLayout
android:id="@+id/linearlayout_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center_vertical">
<TextView
android:layout_margin="5dp"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="@string/title_password"
android:textAppearance="?android:attr/textAppearanceLarge">
</TextView>
<EditText
android:id="@+id/edittext_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/password_hint"
android:inputType="textPassword" >
</EditText>
</LinearLayout>
</LinearLayout>
很取巧的辦法,
回覆刪除謝謝解決了我的困擾。
點個廣告贊助你。
感謝, 這招有用!
回覆刪除加在parent viewgroup 有時會使鍵盤隱藏相關程式失效
回覆刪除建議focus在一個寬高為0 的dummy view