啓動Activity時禁止彈出軟鍵盤

Android編程時,當打開一個activity時,經常會因爲內部存在editText類的組件,自動出現軟鍵盤,影響視覺效果。 
如果屏蔽軟鍵盤,代碼會比較繁雜,下面是列舉了一個簡單的方法。 
我們可以這樣來處理視圖,將editText的焦點換成別的組件,像TextView,Button等等,這樣就不會出現軟鍵盤了。 


一,下面這樣做,需要點擊按鈕兩次,才響應操作


先了解兩句代碼: 
   View.setFocusable(true), 對應xml : android:focusable="true". 
   View.setFocusableInTouchMode(true),對應xml :android:focusableInTouchMode="true". 

    兩者的意思是讓組件可以獲得焦點。不過有些區別,前者執行false條件後,在執行true,還是不能獲取焦點。後者執行上述過程,還是能獲取焦點。 

      當你加入上述代碼後,在創建activity時,調用對應view的requestFocus(),這樣就可以獲得焦點了。當editText失去焦點了,也就不會有軟鍵盤了


二,找到真正的解決方法了

activity“阻止自動彈出軟鍵盤”的方法 -尤其是對於Tab頁下的!


activity 第一個獲取焦點的組件是 EditText 時,開啓這個activity 時就會自動彈出軟鍵盤。

今天設計的程序不想要自動彈出,於是照了相關資料,但是嘗試了半天都不好使,讓本人很鬱悶,

最後的最後,終於找到了根源所在:

   我的activity是Tab頁簽下的~!

   所以應把代碼加在繼承於TabActivity的那個activity中!!而不是由點擊Tab頁啓動的那個activity~

 

  <activity android:name=".MyTabActivity" android:label="@string/app_name"
           android:windowSoftInputMode="stateHidden" />

 

   這樣就成功了~!

—————————————————————————————————————————————————

時隔半年,又遇到Tab頁中有的Activity需要彈出鍵盤,有的Activity需要隱藏掉的情況,

這次用的是在Activity中加代碼的方法,先看下代碼在結束原因吧!

 

public class xxxActivity extends Activity {
 
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.input_camera_activity);
  
 }
 
 
 @Override
 protected void onResume() {
  super.onResume();
  HideKeyboard();//隱藏鍵盤
 }
 
 //隱藏鍵盤
 private void HideKeyboard() { 
  new Timer().schedule(new TimerTask()
  {
   @Override
   public void run() {
    InputMethodManager manager = ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE));
    manager.hideSoftInputFromWindow(
     InputCameraActivity.this.getCurrentFocus().getWindowToken(),
     InputMethodManager.HIDE_NOT_ALWAYS
     );
   }
  }, 10);
 } 
 

 

這個xxxActivity 是Tab頁中的一個Activity,它想要隱藏掉軟鍵盤,

1.開啓線程延時的原因是:如果在Create方法中就直接關閉軟鍵盤會報錯,意思是Activity窗口沒有初始化完,不可以進行諸如此類的操作。於是延時一小會兒,再執行隱藏軟鍵盤的代碼,就可以了。注意,即使不是在Tab相關的Activity中,也是這樣!!

2.寫在Resume()中的原因是,Tab頁切換時不是從Activity的OnCreate()方法重新執行,所以爲保證每次切換到該Activity時都能隱藏掉軟鍵盤,所以要在OnResume()中寫。

 

————————————————————————————————————————

一般情況下(不是Tab的)據說有以下幾種方法:

[轉自]http://www.cnblogs.com/brainy/archive/2012/05/24/2516923.html

1、//隱藏軟鍵盤   

((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);   

  

2、//顯示軟鍵盤,控件ID可以是EditText,TextView   

((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(控件ID, 0); 

 

3、不自動彈出鍵盤:

帶有EditText控件的在第一次顯示的時候會自動獲得focus,並彈出鍵盤,如果不想自動彈出鍵盤,有兩種方法:

方法一:在mainfest文件中把對應的activity設置

android:windowSoftInputMode="stateHidden" 或者android:windowSoftInputMode="stateUnchanged"

方法二:可以在佈局中放一個隱藏的TextView,然後在onCreate的時候requsetFocus

注意TextView不要設置Visiable=gone,否則會失效

,可以在佈局中放一個隱藏的TextView,然後在onCreate的時候requsetFocus

注意TextView不要設置Visiable=gone,否則會失效

<TextView

        android:id="@+id/text_notuse"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:focusable="true"

        android:focusableInTouchMode="true"

        />

 

TextView textView = (TextView)findViewById(R.id.text_notuse);

            textView.requestFocus();


http://blog.sina.com.cn/s/blog_6dc41baf01015wqy.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章