Android 上下文操作模式

时间:2021-10-05 05:21:17

上下文操作模式和普通上下文菜单的区别在于操作模式的显示会覆盖视图顶层操作栏,而不是悬浮式的
通过在按钮上注册长按点击事件触发

上下文菜单 xml部分

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:title="登录"
        android:id="@ id/login"
        />
    <item android:title="注册"
        android:id="@ id/register"
        />
</menu>

java部分

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 按钮长按触发启动上下文操作模式
        findViewById(R.id.btn).setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                startActionMode(MainActivity.this.ac);
                return false;
            }
        });
    }
    
    // 实例化操作模式的回调类
    ActionMode.Callback ac = new ActionMode.Callback() {
        
        // 初始化时触发
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            getMenuInflater().inflate(R.menu.first, menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }
        
        // 菜单项点击监听器 
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            switch (item.getItemId()) {
                case R.id.login:
                    Toast.makeText(MainActivity.this, "你刚刚点了登录", Toast.LENGTH_LONG).show();
                    break;
                case R.id.register:
                    Toast.makeText(MainActivity.this, "你刚刚点了注册", Toast.LENGTH_LONG).show();
                    break;
            }
            return true;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {
            // 结束时触发
        }
    };
}