2010-12-20 31 views
16

editTextは私のアプリでフォーカスを失っていません。それをクリックするとオレンジ色の境界線があり、黒い線のカーソルが表示されます。 これを編集するために、 : Stop EditText from gaining focus at Activity startup ので、それはアプリの起動に焦点を当てて取得していません。..editTextがフォーカスを失うことはありません

これは私のコードです:

final EditText et = (EditText)findViewById(R.id.EditText01); 

final InputMethodManager imm = (InputMethodManager) getSystemService(
    INPUT_METHOD_SERVICE); 

et.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT); 
    } 
}); 

et.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    public void onFocusChange(View v, boolean hasfocus) { 
     if(hasfocus) { 
     imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT); 
     } else { 
     imm.hideSoftInputFromWindow(et.getWindowToken(), 0); 
     } 
    } 
}); 

しかし、それは私が任意の場所をクリックしたときにonFocusChangeを呼び出していないようですeditTextの外側に!

+2

私はほとんど同じことを経験しています。私が知る限り、onFocusChange()は、フォーカスが1つのEditTextから別のEditTextにタッチイベントを介して移動されたときには生成されません。おそらく@Overriding onTouch()が機能するかもしれませんか?オフハンドを知らない。 –

+0

これは問題です。一つのedittextを動作させるために、 'World \ {EditText}'のコードを変更する必要があります。何が... ... – Bondax

答えて

1

リスナーをXMLレイアウトに作成して、LinearLayoutのバックグラウンドでクリックをリッスンすることができます。onClickここからEditText.clearFocus()に電話することができます。

+1

.cancelFocus()メソッドがありません... –

+2

私は '.clearFocus()'を意味すると思います – styler1972

15

これは簡単です。あなたはのLinearLayoutまたは他の任意の他に次のように置くことができます。

android:focusableInTouchMode="true" 
+1

これはすばらしい答えです。私はRelitiveLayoutでこれを使用して、EditTextに常にフォーカスがないようにしました。 +1 – Sevren

0

あなたがメソッドを呼び出すことで、他のフィールドにフォーカスを設定することによって、のEditTextからフォーカスを削除することができます。

終了ボタンをクリックして戻るボタンにフォーカスを設定し、終了ボタンクリックリスナの中の戻るボタンでメソッドを呼び出すとします。

あなたの問題は解決しました。

back.requestFocusFromTouch(); 
3

オーバーライドActivity.dispatchTouchEvent():誰かがどこかをクリックするたびに

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
     View view = getCurrentFocus(); 
     if (view != null && view instanceof EditText) { 
      Rect r = new Rect(); 
      view.getGlobalVisibleRect(r); 
      int rawX = (int)ev.getRawX(); 
      int rawY = (int)ev.getRawY(); 
      if (!r.contains(rawX, rawY)) { 
       view.clearFocus(); 
      } 
     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 

そうすれば、あなたがコントロールを持っている、それがコード内の一点でのみです。

関連する問題