天天看點

EditText焦點自動帶出軟鍵盤問題

總結一下網上的辦法

可是一個都不管用

我想真的是應該我的虛拟機出問題了

神啊

讓我趕緊有錢買安卓手機吧。。

(那種很便宜的真心不想買。。。感覺。。不劃算。。OTZ

========================================================================原因分析:

       Android新啟動Activity,dialog或者其他窗體中中包含EditText, 新啟動的activity的焦點預設在EditText上,這時候android系統會自動彈出軟鍵盤。這會導緻擠壓activity本來的界面,影響美觀。

幾種解決方法:

      一、解決效果:activity打開,軟鍵盤不自動打開,焦點不在editText上面。當點選editText,再打開軟鍵盤

             具體方法:在onCreate()方法中将焦點放在另一個view上. view使用requestFocus()焦點,但是如果讓button或者textView之類控件直接使用requestFocus()方法,則無法 擷取焦點,焦點會依然在editText上。

                              隻能在使用View的requestFocus()方法之前調用下面2個方法,view才可擷取焦點:

                              view.setFocusable(true);

                              view.setFocusableInTouchMode(true);

                              然後調用 requestFocus()即可擷取焦點。

     二、解決效果:activity打開,軟鍵盤不自動打開,焦點落在editText上面。當點選editText,再打開軟鍵盤

            具體方法:在Activity中OnCreate方法裡面加下面這句代碼 getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

                             或者在AndroidManifest.xml中該activity處添加android:windowSoftInputMode屬性

                             eg. <activity android:name="SelectPartsActivity"

                                                 android:screenOrientation="landscape"

                                                android:windowSoftInputMode="stateAlwaysHidden" />

                             PS:如果實在不放心,可以兩個都添加

     三、解決效果:android機頂盒開發時,長按遙控器OK鍵(此處的長按操作一般都為使用者按鍵時間過長導緻的誤操作,而不是有意長按)打開Activity,軟鍵盤不自動打開,焦點落在editText上面。

            解決方法(本人未測試,不知是否可用):在OnCreate中設定延時,必須等延時事件完畢才讓EditText能獲得焦點彈出軟鍵盤;或者讓EditText一直獲得焦點,必須延時事件結束後EditText才能響應軟鍵盤彈出事件。此處用到Timer輔助實作。

                            eg. @Override

                                    public void onCreate(Bundle savedInstanceState) {

                                        super.onCreate(savedInstanceState);

                                        setContentView(R.layout.main);

                                        Timer timer = new Timer();

                                        timer.schedule(new TimerTask() {

                                            @Override

                                             public void run() {

                                                 //此處EditText獲得焦點或者軟鍵盤彈出操作

                                                 ...................

                                                // InputMethodManager imm = (InputMethodManager)MainActivity.this.getSystemService(INPUT_METHOD_SERVICE);

                                                // imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

                                             }

                                         }, 1000); //在一秒後操作

                                     }

                                 自動關閉:

                                 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

                                 imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

引用自 http://www.eoeandroid.com/blog-687425-4752.html

==================================================================

剛進入activity的時候,如果布局元件有edittext的話,往往edittext會擷取焦點,自動彈出軟鍵盤,影響整個界面的視覺效果。解決方法如下:

可以在edittext的父布局結構中(例如LinearLayout,RelativeLayout等)添加

view sourceprint?

android:focusable="true"

android:focusableInTouchMode="true"

<TextView

android:id="@+id/txtNotuse"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:focusable="true"

android:focusableInTouchMode="true"

android:textIsSelectable="true" />

繼續閱讀