Three.jsを使って、作ってみた

プログラミング関連の事を色々書いています(^^) 週末はレストランやコンビニのお菓子のことを書いています。

android ソフトキーボードを非表示にする

今回は、androidのソフトキーボードを非表示にする方法を書きます。


ちなみに、ソフトキーボードというのは、こういうやつのことです↓
f:id:gupuru:20140412113923p:plain
文字を入力するときに出てくるキーボードです。


このソフトキーボードを非表示にしたい時があると思います。
例えば、ボタンが押された時やN文字入力された時などなど・・・。


では、ソフトキーボードを非表示にする方法を書いていきます。

やり方は、とても簡単です。こんな感じにやります↓↓

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);

これだけで、ソフトキーボードを非表示にできます。
上のコードを少し詳しく書くと、InputMethodManagerを取得して、hideSoftInputFromWindowメソッドを呼び出しています。


上のコードを使って、edittextに4文字入力されたら、ソフトキーボードを非表示にするプログラムを書きます。

java

public class MainActivity  extends Activity implements TextWatcher {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       
        EditText edittext = (EditText)findViewById(R.id.edittext);
        edittext.addTextChangedListener(this);  
        
       
    }
      

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,int after) {
    }
 
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }
 
    @Override
    public void afterTextChanged(Editable s) {

     /*---  追加    ---*/    
     if(s.toString().length() == 4){
    		
    	     // ソフトキーボードを非表示にする
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
            
            Toast.makeText(this, "非表示", Toast.LENGTH_LONG).show();

      }
  
  /*---  追加    ---*/    

    }


}

xml

<EditText 
        android:id="@+id/edittext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
/>

実行結果
f:id:gupuru:20140412115532p:plain

TextWatcherを使って、文字数を調べています。そして4文字になるとソフトキーボードが非表示になるようになっています。


さらに、edittextのフォーカスが外れた時にソフトキーボードが非表示になるプログラムも書きます。

java

public class MainActivity  extends Activity implements TextWatcher {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       
        EditText edittext = (EditText)findViewById(R.id.edittext);
      edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                // EditTextのフォーカスが外れた場合
                if (hasFocus == false) {
                	
         //ソフトキーボード非表示
                	InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                
                	
                }
            }
        });
    }
      
    public void nya(View v){
        // ボタン押下時の処理
    	Button button = (Button) findViewById(R.id.button);
       //フォーカスをボタンに移動
    	button.setFocusable(true);
        button.setFocusableInTouchMode(true);
        button.requestFocus();
    }

}

xml

<EditText 
        android:id="@+id/edittext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
/>

<Button 
        android:id="@+id/button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="ぼたん"
        android:onClick="nya"
 />

実行結果
f:id:gupuru:20140412120409p:plain
ボタンが押されたらフォーカスが移動するようにしています。フォーカスが外れたらソフトキーボードは非表示なります。

以上で、終わります。


参考サイト
ソフトキーボードを非表示にする « Tech Booster