アクションバーを使用しているときよりもアクションバーを使用しているときは、ハードウェアの戻るボタンを押してオプションを閉じると、定義したメニューのオプションが表示されます。アクションバーのハードウェア戻るボタンの動作を無効にする
しかし、私は、押した場合に別の動作をトリガーする可能性を提供したいので、アイテムが表示されているときにハードウェアの戻るボタンを押すのに反応する方法を変更する必要があります。
は、これまでのところ、私は次のことを試してみた:
myToolbar.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if (i == KeyEvent.KEYCODE_BACK) {
finish();
return false;
}
else
{
return true;
}
}
});
期待このコードは動作しませんので、ハードウェアバックボタンが押されたときに、それも発生しません。私もそのonKeyPreImeイベントを上書きできるようにするには以下のクラスとツールバーから拡張することによって自分自身のツールバーを作成しようとした
:
public class LockToolbar extends Toolbar
{
private KeyImeChange keyImeChangeListener;
/* Must use this constructor in order for the layout files to instantiate the class properly */
public LockToolbar(Context context)
{
super(context);
// TODO Auto-generated constructor stub
}
public void setKeyImeChangeListener(KeyImeChange listener){
keyImeChangeListener = listener;
}
public interface KeyImeChange {
public void onKeyIme(int keyCode, KeyEvent event);
}
@Override
public boolean onKeyPreIme (int keyCode, KeyEvent event)
{
if(keyImeChangeListener != null){
keyImeChangeListener.onKeyIme(keyCode, event);
}
return false;
}
}
クラスを独自に最低でも正しくコンパイルされますしかし、クラスツールバーで定義されているsetSupportActionBar命令はToolbarオブジェクトを正しく動作させる必要があり、lockToolbarをサポートできません。
私はメソッドsetSupportActionBarをオーバーライドすることができますが、これは非常に非常に長いと思われる、私はいくつかの簡単な解決策があると思います。
この問題にどのようにアプローチすればよいですか?
void onBackPressed()。アクティビティがユーザの背中キーの押下を検出したときに呼び出されます。あなたはそれを試しましたか? – ElDuderino
問題は、BackPressedは、毎回同じように動作する必要はありませんが、とにかくそれを解決しなければなりません。 – user2638180