2016-11-06 1 views
5

Я хочу скрыть клавиатуру, нажав вне edittext. Это мой XML-код:Как скрыть клавиатуру одним касанием вне edittext?

<RelativeLayout 
android:clickable="true" 
android:focusable="true" 
android:focusableInTouchMode="true" 
android:onClick="rl_main_onClick"> 
<RelativeLayout 
    //Here there are some widgets including some edittext. 
</RelativeLayout> 

Это мой Java-код (MainActivity):

public void rl_main_onClick(View view) { 
    InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
} 

Но я должен нажать дважды, чтобы скрыть клавиатуру. Первый щелчок просто изменяет «следующий» (для последнего edittext это «сделано»), чтобы ввести значок, затем второй коснитесь, скрывает клавиатуру. Это то, что это произойдет в первом кране:

What the first tap does.

Теперь у меня есть два вопроса:

1- Как я могу это исправить и скрыть клавиатуру только одного крана?

2- Возможно ли это сделать для всех моих edittext (один код для всех)?

Заранее спасибо.

ответ

7

Попробуйте заменить onClick на onTouch. Для этого вам необходимо изменить расположение атрибутов, как это:

<RelativeLayout 
    android:id="@+id/relativeLayout" 
    android:clickable="true" 
    android:focusable="true" 
    android:focusableInTouchMode="true"> 

    <RelativeLayout> 

     // widgets here 

    </RelativeLayout> 

</RelativeLayout> 

Затем удалите rl_main_onClick(View view) {...} метод и метод вставки onTouch слушателя внутри onCreate():

findViewById(R.id.relativeLayout).setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
     return true; 
    } 
});