1. 程式人生 > >Android 關於 EditText 的一些問題 如:不彈出輸入法

Android 關於 EditText 的一些問題 如:不彈出輸入法

2.EditText 始終不彈出軟體鍵盤 例:EditText edit=(EditText)findViewById(R.id.edit); edit.setInputType(InputType.TYPE_NULL);

Android 的 EditText inputtype
Android 中 inputType 屬性在 EditText 輸入值時啟動的虛擬鍵盤的風格有著重要的作用。 這也大大的方便的操作。有時需要虛擬鍵盤只為字元或只為數字。所以 inputType 尤為重 要。 設定文字的型別,用於幫助輸入法顯示合適的鍵盤型別。 有如下值設定: none、text、 textCapCharacters 字母大小、 textCapWords 單詞首字母大小、


textCapSentences 僅第一個字母大小、 textAutoCorrect、 textAutoComplete 自動完成、 textMultiLine 多行輸入、 textImeMultiLine 輸入法多行(如果支援)、 textNoSuggestions 不提示、 textEmailAddress 電子郵件地址、 textEmailSubject 郵件主題、 textShortMessage 簡訊息(會多一個表情按鈕出來,點開如下圖)、

textLongMessage 長訊息?、 textPersonName 人名、 textPostalAddress 地址、 textPassword 密碼、 textVisiblePassword 可見密碼(實現禁止輸入中文)、 textWebEditText 作為網頁表單的文字、 textFilte 文字篩選過濾、 textPhonetic 拼音輸入、 numberSigned 有符號數字格式、 numberDecimal 可帶小數點的浮點格式、 phone 電話號碼、


datetime 時間日期、 date 日期、 time 時間 <EditText android:layout_width="fill_parent" android:layout_height="wrap_content"android:inputType="phone" /> //文字型別,多為大寫、小寫和數字符號。 android:inputType="none" android:inputType="text" android:inputType="textCapCharacters" android:inputType="textCapWords" android:inputType="textCapSentences" android:inputType="textAutoCorrect" android:inputType="textAutoComplete" android:inputType="textMultiLine" android:inputType="textImeMultiLine" android:inputType="textNoSuggestions" android:inputType="textUri" android:inputType="textEmailAddress" android:inputType="textEmailSubject" android:inputType="textShortMessage" android:inputType="textLongMessage" android:inputType="textPersonName" android:inputType="textPostalAddress" android:inputType="textPassword" android:inputType="textVisiblePassword" android:inputType="textWebEditText" android:inputType="textFilter" android:inputType="textPhonetic" //數值型別 android:inputType="number" android:inputType="numberSigned" android:inputType="numberDecimal" android:inputType="
phone"//撥號鍵盤

android:inputType="datetime" android:inputType="date"//日期鍵盤 android:inputType="time"//時間鍵盤

android 軟鍵盤隱藏總結
分類: android2012-04-10 10:26 172 人閱讀 評論(0) 收藏 舉報 androidservice 輸入法 actionnull

1>軟鍵盤的狀態——隱藏或顯示。 一:自動彈出軟鍵盤

1. Timer timer=new Timer(); 2. 3. 4. 5. public void run() { InputMethodManager inputMethodManager=(InputMethodManager) get SystemService(Context.INPUT_METHOD_SERVICE); 6. inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_N OT_ALWAYS); 7. 8. } }, 2000); timer.schedule(new TimerTask() {

二:軟鍵盤 Activity 中設定:

Android:windowSoftInputMode="stateUnspecified",預設設定: 軟鍵盤的狀態 (隱藏或可見)沒有被指定。系統將選擇一個合適的狀態或依賴於主題的設 置。 藏。 "stateUnchanged", 軟鍵盤被 "stateAlwaysHidden", 軟鍵 保持上次的狀態。 "stateHidden", 當用戶選擇該 Activity 時,軟鍵盤被隱

盤總是被隱藏的。 "stateVisible",. 軟鍵盤是可見 的。 "stateAlwaysVisible", 當用 戶選擇這個 Activity 時,軟鍵盤是可見的。 "adjustUnspecified", . 它不被 指定是否該 Activity 主視窗調整大小以便留出軟鍵盤的空間, 或是否視窗上的 內容得到螢幕上當前的焦點是可見的。 系統將自動選擇這些模式中一種主要依賴 於是否視窗的內容有任何佈局檢視能夠滾動他們的內容。 如果有這樣的一個視 圖, 這個視窗將調整大小, 這樣的假設可以使滾動視窗的內容在一個較小的區域 中可見的。這個是主視窗預設的行為設定。也就是說, 系統自動決定是採用平 移模式還是壓縮模式,決定因素在於內容是否可以滾 動。 "adjustResize", (壓縮模式) 當軟鍵盤彈出時,要對主視窗調整螢幕的大小以便留出軟鍵盤的空間。 "adjustPan"] > (平移模式:當輸入框不會被遮擋時,該模式沒有對佈局進行 調整,然而當輸入框將要被遮擋時, 視窗就會進行平移。也就是說,該模式始 終是保持輸入框為可見
三:隱藏軟鍵盤: EditText edit=(EditText)findViewById(R.id.edit); InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edit.getWindowToken(),0);

. . .

4.EditText 預設不彈出軟體鍵盤 方法一: 在 AndroidMainfest.xml 中選擇哪個 activity,設定 windowSoftInputMode 屬性為 adjustUnspecified|stateHidden 例如:<activity Android:name=".Main" Android:label="@string/app_name" Android:windowSoftInputMode="adjustUnspecified|stateHidden" Android:configChanges="orientation|keyboardHidden"> <intent-filter> <action Android:name="android.intent.action.MAIN" /> <category Android:name="android.intent.category.LAUNCHER" />

</intent-filter> </activity> 方法二: 讓 EditText 失去焦點,使用 EditText 的 clearFocus 方法 例如:EditText edit=(EditText)findViewById(R.id.edit); edit.clearFocus(); 方法三: 強制隱藏 Android 輸入法視窗 例如:EditText edit=(EditText)findViewById(R.id.edit); InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edit.getWindowToken(),0); 5.EditText 始終不彈出軟體鍵盤 例:EditText edit=(EditText)findViewById(R.id.edit); edit.setInputType(InputType.TYPE_NULL);

Android 中 EditTex 焦點設定和彈 不彈出輸入法的問題
今天程式設計碰到了一個問題:有一款平板,開啟一個有 EditText 的 Activity 會預設彈出輸入 法。 為了解決這個問題就深入研究了下 android 中焦點 Focus 和彈出輸入法的問題。 在網上看了 些例子都不夠全面,在這裡全面總結下。 一:EditText 為什麼會預設彈出輸入法? 同樣的程式碼,碰到有 EditText 控制元件的介面時有的機子會彈出輸入法,有的機子不會彈 出。不好意思,這問題我也一頭霧水,誰知道可以告訴我,否則我就把這個問題留下來,以後研 究 android 原始碼時再搞個清楚。但是...我有解決方案。 二:預設彈出和預設關閉輸入法的解決方案。 1.預設關閉,不至於進入 Activity 就開啟輸入法,影響介面美觀。 ①在佈局檔案中,在 EditText 前面放置一個看不到的 LinearLayout,讓他率先獲取焦點:

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

②方法二:先看一個屬性 android:inputType:指定輸入法的型別,int 型別,可以用|選擇 多個。取值可以參考:android.text.InputType 類。取值包括:text,textUri, phone,number, 等. Android SDK 中有這麼一句話“If the given content type is TYPE_NULL then a soft keyboard will not be displayed for this text view”, 先將 EditText 的 InputType 改變為 TYPE_NULL, 輸入法就不會彈出.然後再設定監聽,

再重新設定它的 InputType.
editText.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub int inType = editText.getInputType(); // backup the input type editText.setInputType(InputType.TYPE_NULL); // disable soft input editText.onTouchEvent(event); // call native handler editText.setInputType(inType); // restore input type return true; } }); 2.預設彈出。有時候按照需求可能要求預設彈出輸入法。方案如下: EditText titleInput = (EditText) findViewById(R.id.create_edit_title); titleInput.setFocusable(true); titleInput.requestFocus(); onFocusChange(titleInput.isFocused()); private void onFocusChange(boolean hasFocus) { final boolean isFocus = hasFocus; (new Handler()).postDelayed(new Runnable() { public void run() { InputMethodManager imm = (InputMethodManager) titleInput.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if(isFocus) { imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } else { imm.hideSoftInputFromWindow(titleInput.getWindowToken(),0); } } }, 100); } 我覺得因為在 Android 的主執行緒中對 UI 的操作無效,所以必須在 Handler 中實現彈出輸入 法的操作。 三。關於焦點和輸入法的個人理解

獲取焦點是獲取焦點,彈輸入法是彈輸入法。獲取焦點後並不一定會彈出輸入法,在網上搜 了一圈,主流回答是“還有就是已開啟介面就是

focus 的 text 的話有可能也是不行

的,UI 渲染是需要時間的”......
由於對原始碼不懂,我對這一點也沒有個全面的認識。只能將焦點和輸入法分成兩塊來處理。 焦點的開啟和關閉特別簡單。 焦點的獲取: titleInput.setFocusable(true); titleInput.requestFocus(); 焦點的取消: titleInput.setFocusable(false);

四。關於經常呼叫的處理軟鍵盤的函式如下:<轉載>
1、開啟輸入法視窗: InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

// 接受軟鍵盤輸入的編輯文字或其它檢視 imm.showSoftInput(submitBt,InputMethodManager.SHOW_FORCED); 2、關閉出入法視窗 InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

inputMethodManager.hideSoftInputFromWindow(OpeListActivity.this.getCurrentFocus().g etWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); //接受軟鍵盤輸入的編輯文字或其它檢視 inputMethodManager .showSoftInput(submitBt,InputMethodManager.SHOW_FORCED); 3、如果輸入法開啟則關閉,如果沒開啟則開啟 InputMethodManager m=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 4、獲取輸入法開啟的狀態 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); boolean isOpen=imm.isActive(); isOpen 若返回 true,則表示輸入法開啟