1. 程式人生 > >如何讓鍵盤 EditText 在 Activity 啟動時不彈出影響使用者體驗

如何讓鍵盤 EditText 在 Activity 啟動時不彈出影響使用者體驗

問題描述

我的應用裡有一個 Activity ,其中包含一個 EditText 和 一個 ListView ,當 Activity 啟動時,EditText 會立即獲得焦點,我嘗試了下面的這句:

EditText.setSelected(false);

但無濟於事,請問 Activity 啟動時如何阻止 EditText 獲得焦點?

高票答案1

在 EditText 的父元件(比如 LinearLayout )中新增如下兩個屬性:


android:focusable="true"
android:focusableInTouchMode="true"

如果沒有父元件的話可以新增一個隱藏的 LinearLayout ,並加上上面的兩個屬性:


<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px" />

高票答案2

你是不想讓它獲得焦點?還是不想因為焦點在 EditText 上導致顯示虛擬鍵盤?我覺得 EditText 在啟動時獲取到了焦點不是一個問題,但使用者沒有主動請求 EditText 的焦點的情況下卻導致虛擬鍵盤的開啟,這肯定是一個問題。

設定 android:windowSoftInputMode="stateHidden"

可以在進入 Activity 後隱藏虛擬鍵盤,或者 設定 android:windowSoftInputMode="stateUnchanged" 讓虛擬鍵盤的狀態不改變(也即是說,當 Activity 轉至前臺時保留軟鍵盤最後所處的任何狀態,無論是可見還是隱藏。)。

android:windowSoftInputMode屬性詳解:

activity主視窗與軟鍵盤的互動模式,可以用來避免輸入法面板遮擋問題,Android1.5後的一個新特性。

這個屬效能影響兩件事情:

【一】當有焦點產生時,軟鍵盤是隱藏還是顯示

【二】是否減少活動主視窗大小以便騰出空間放軟鍵盤

它的設定必須是下面列表中的一個值,或一個”state…”值加一個”adjust…”值的組合。在任一組設定多個值——多個”state…”values,例如&mdash有未定義的結果。各個值之間用|

分開。例如:

<activity android:windowSoftInputMode="stateVisible|adjustResize". . . >

在這設定的值(除"stateUnspecified"和"adjustUnspecified"以外)將覆蓋在主題中設定的值

各值的含義:

【1】stateUnspecified:軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設定

【2】stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity裡的狀態,無論是隱藏還是顯示

【3】stateHidden:使用者選擇activity時,軟鍵盤總是被隱藏

【4】stateAlwaysHidden:當該Activity主視窗獲取焦點時,軟鍵盤也總是被隱藏的

【5】stateVisible:軟鍵盤通常是可見的

【6】stateAlwaysVisible:使用者選擇activity時,軟鍵盤總是顯示的狀態

【7】adjustUnspecified:預設設定,通常由系統自行決定是隱藏還是顯示

【8】adjustResize:該Activity總是調整螢幕的大小以便留出軟鍵盤的空間

【9】adjustPan:當前視窗的內容將自動移動以便當前焦點從不被鍵盤覆蓋和使用者能總是看到輸入內容的部分