1

Процедура в связанном ниже вопросе не работает для меня ни со стандартом, ни с поддержкой ActionMode. ACTION_UP никогда не появляется как параметр, хотя ACTION_DOWN делает, но независимо от того, ActionMode все еще отменен.Кнопка «Назад» при активном действии ActionMode

Prevent to cancel Action Mode by press back button

Может кто-нибудь подскажет, как предотвратить режим действия от закрытия при нажатии клавиши возврата?

Мой код

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class test extends AppCompatActivity { 

Toolbar toolbar; 
Button standard; 
Button support; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.test); 

    toolbar= (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    standard= (Button) findViewById(R.id.standard); 
    standard.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActionMode(standardCallback); 
      standard.setVisibility(View.GONE); 
      support.setVisibility(View.GONE); 
     } 
    }); 

    support= (Button) findViewById(R.id.support); 
    support.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startSupportActionMode(supportCallback); 
      standard.setVisibility(View.GONE); 
      support.setVisibility(View.GONE); 
     } 
    }); 

} 

private android.view.ActionMode.Callback standardCallback=new android.view.ActionMode.Callback() { 
    @Override 
    public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) { 
     mode.setTitle("Standard Action Mode Enabled"); 
     return true; 
    } 

    @Override 
    public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) { 
     return false; 
    } 

    @Override 
    public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) { 
     return false; 
    } 

    @Override 
    public void onDestroyActionMode(android.view.ActionMode mode) { 
     standard.setVisibility(View.VISIBLE); 
     support.setVisibility(View.VISIBLE); 
    } 
}; 

//requires theme entry: <item name="windowActionModeOverlay">true</item> 
private android.support.v7.view.ActionMode.Callback supportCallback=new android.support.v7.view.ActionMode.Callback() { 
    @Override 
    public boolean onCreateActionMode(android.support.v7.view.ActionMode mode, Menu menu) { 
     mode.setTitle("Support Action Mode Enabled"); 
     return true; 
    } 

    @Override 
    public boolean onPrepareActionMode(android.support.v7.view.ActionMode mode, Menu menu) { 
     return false; 
    } 

    @Override 
    public boolean onActionItemClicked(android.support.v7.view.ActionMode mode, MenuItem item) { 
     return false; 
    } 

    @Override 
    public void onDestroyActionMode(android.support.v7.view.ActionMode mode) { 
     standard.setVisibility(View.VISIBLE); 
     support.setVisibility(View.VISIBLE); 
    } 
}; 

@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
      // handle your back button code here 
      Toast.makeText(this,"Back ACTION_UP",Toast.LENGTH_LONG).show(); 
      return true; // consumes the back key event - ActionMode is not finished 
     } 

    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { 
     // handle your back button code here 
     Toast.makeText(this,"Back ACTION_DOWN",Toast.LENGTH_LONG).show(); 
     return true; // consumes the back key event - ActionMode is not finished 
    } 

    return super.dispatchKeyEvent(event); 
} 

}

Layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 
    android:minHeight="?android:attr/actionBarSize" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

<Button 
    android:id="@+id/standard" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="30dp" 
    android:text="Standard"/> 

<Button 
    android:id="@+id/support" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="30dp" 
    android:text="Support"/> 

</LinearLayout> 

ответ

0

Я решил эту проблему с помощью панели инструментов из библиотеки поддержки эмулировать бар ActionMode.

+2

Вы имеете в виду, установив пользовательский вид на ActionMode? который является панелью инструментов? вы можете быть немного более ясными? я столкнулся с такой же проблемой. – Apsaliya

Смежные вопросы