2011-08-10 13 views
1

特定のEditTextが選択されるまでソフトウェアキーボードが消えるのを防ぐ方法を教えてください。レイアウト中に複数のEditTextがあり、最初に開くと自動的に選択され、ソフトウェアキーボードが表示されます。EditTextが選択されるまでAndroidのソフトウェアキーボードを無効にする

これを無効にするには、android:focusable = "false"を設定します。しかし、アイテムをクリックしてアイテムを表示することは不可能です。

私が望むもの:アクティビティが開始され、ユーザがすべての編集テキストを見た後、ユーザがそれをクリックすると、ソフトウェアキーボードが開き、EditTextに入力することができます。これは可能ですか?

答えて

12
あなたの活動に

onCreate()

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
+0

これはうまくいきました。ありがとう:) –

0
final InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 

    txt1.setOnFocusChangeListener(new OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if(!(hasFocus || txt2.hasFocus())) 
      { 
      mgr.hideSoftInputFromWindow(txt1.getWindowToken(), 0); 
      } 

     } 
    }); 

このコードは、フォーカスハンドリングとキーボード表示のために良い効果を持っている...

1

私はキーボードを作るためにこれをしようとは、ユーザーがのEditTextをクリックした場合のみ表示されます他のすべてのソリューションは私のためには機能しません。 少し奇妙ですが、今から私が見つけた解決策です。 このイベントは、レイアウト上のすべての編集テキストに配置する必要があります。

EditText text = (EditText) getActivity().findViewById(R.id.myText); 
text.setText("Some text"); 
text.setFocusableInTouchMode(false); 
text.setOnClickListener(click); 
text.setOnFocusChangeListener(focus); 

EDIT:このよう

OnClickListener click = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     v.setFocusableInTouchMode(true); 
     v.requestFocusFromTouch(); 
    } 
}; 
OnFocusChangeListener focus = new OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (!hasFocus) { 
      v.setFocusableInTouchMode(false); 
     } 
    } 
}; 

私はちょうどカスタムエディットテキストは、私のプロジェクトで使用して簡単にするために作る

、それは便利だった願っています。

public class EditTextKeyboardSafe extends EditText { 
    public EditTextKeyboardSafe(Context context) { 
     super(context); 
     initClass(); 
    } 

    public EditTextKeyboardSafe(Context context, AttributeSet attrs, 
      int defStyle) { 
     super(context, attrs, defStyle); 
     initClass(); 
    } 

    public EditTextKeyboardSafe(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initClass(); 
    } 

    private void initClass() { 
     this.setFocusableInTouchMode(false); 
     this.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       v.setFocusableInTouchMode(true); 
       v.requestFocusFromTouch(); 
      } 
     }); 
     this.setOnFocusChangeListener(new OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (!hasFocus) { 
        v.setFocusableInTouchMode(false); 
       } 
      } 
     }); 
    } 

} 
関連する問題