2017-08-18 23 views
2

私の活動では、ソフトキーボードはいつも開いているはずです。したがって、ユーザーが戻るボタンを押すと、アクティビティは正常に終了するはずです。ただし、デフォルトのAndroidの動作では、開いているときに代わりにキーボードを閉じることができます。これにより、ユーザーはアクティビティを終了するために2回クリックする必要があります。ソフトキーボードが開いていても、戻るボタンを押したときにアクティビティが常に終了するように、この動作をオーバーライドするにはどうすればよいですか?これを行う簡単な方法はありますか?ソフトキーボードが開いていても、Androidバックボタンの操作を終了します

これは一般的な問題だと確信していますが、この直接の質問は見つかりませんでした。

+2

アクティビティを閉じる前に、ソフトキーボードを閉じる必要があります。 – KeLiuyue

+0

@KeLiuyue:私は、ユーザーがソフトキーボードと同じバックボタンを押すことでアクティビティを閉じるようにする方法がいくつか存在すると確信しています。 – Sid

+0

私はそれを解決するためにいくつかのワイを試します。しかし、それは多くの要因に依存します。 – KeLiuyue

答えて

0

私はキーボード

//hides keyoard 
    private void hideSoftKeyboard(View v) { 
     InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
    } 
1

を非表示にするには、このメソッドを使用するには、これを試してみてください。

mEditText.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      finish(); 
      return false; 
     } 
}); 

キーボードと終了アクティビティを非表示にすることができます。

ダイアログを使用する場合、このようにすることができます。

mDialog.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       if (isShowDialog) { 
        isShowDialog = false; 
        mDialog.dismiss(); 
        context.finish(); 
       } 
      } 
      return false; 
     } 
}); 

注:またDialog.Dismissダイアログで使用することができますし、something.AndあなたがvkeyCodeeventを使用することができます.AND、それはほとんどのビューで使用することができます。

1

私は同じ状況に陥っています。ここで私はあなたと共有します。私はCustomEditTextを使ってこれを解決しました。

CustomEditText.Java

public class CustomEditText extends android.support.v7.widget.AppCompatEditText { 


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

    OnKeyPreImeListener onKeyPreImeListener; 

    public void setOnKeyPreImeListener(OnKeyPreImeListener onKeyPreImeListener) { 
     this.onKeyPreImeListener = onKeyPreImeListener; 
    } 

    @Override 
    public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
      if(onKeyPreImeListener != null) 
       onKeyPreImeListener.onBackPressed(); 
      return false; 
     } 
     return super.dispatchKeyEvent(event); 
    } 

    public interface OnKeyPreImeListener { 
     void onBackPressed(); 
    } 
} 

MainActivity.Java

public class MainActivity extends BaseActivity{ 

     private CustomEditText editSearchMenu; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     editSearchMenu = 
     (CustomEditText)findViewById(R.id.editSearchMenu); 

     //Initialise interface 
     CustomEditText.OnKeyPreImeListener onKeyPreImeListener=new CustomEditText.OnKeyPreImeListener() { 
      @Override 
      public void onBackPressed() { 
       ((MainActivity)getActivity()).finish(); 
      } 
     }; 

     editSearchMenu.setOnKeyPreImeListener(onKeyPreImeListener); 

     } 

} 

xmlファイル

<com.app.helper.CustomEditText 
        android:id="@+id/editSearchMenu" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_margin="@dimen/diam5dp" 
        android:background="@drawable/custom_rounded_edittext" 
        android:drawableLeft="@drawable/ico_search" 
        android:drawablePadding="@dimen/diam20dp" 
        android:drawableStart="@drawable/ico_search" 
        android:hint="@string/M_SEARCH_HINT" 
        android:padding="@dimen/diam10dp" 
        android:textColor="@android:color/white" 
        android:textColorHint="@android:color/white" 
        android:textSize="@dimen/diam16sp" /> 

・ホープ、このお手伝いをします...これは私の自己をテストしたすべてのデバイスで動作します...他のソリューションはいくつかのデバイスで問題を引き起こしています...他にもいくつかのソリューションがあります...もしあなたが私に知らせてくれたら...

+0

@sid urの問題は解決しましたか? –

1

TextWatcherを実装する必要があります。

あなたのコードは次のとおりです。

public class MainActivity extends AppCompatActivity implements TextWatcher{ 

    EditText editTextt; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     editTextt = (EditText) findViewById(R.id.editTextt); 
     editTextt.addTextChangedListener(this); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if(before == count + 1) 
     { 
      finish(); 
     } 
    } 
} 
関連する問題