通过setDefaultKeyMode设置Activity的五种按键模式

本文介绍了Android中Activity的五种按键模式:DEFAULT_KEYS_DISABLE、DEFAULT_KEYS_DIALER、DEFAULT_KEYS_SHORTCUT、DEFAULT_KEYS_SEARCH_LOCAL和DEFAULT_KEYS_SEARCH_GLOBAL,并提供了设置代码示例。特别讨论了DEFAULT_KEYS_SHORTCUT模式的实现,包括修改菜单配置文件和在MainActivity中的应用。同时提到了DEFAULT_KEYS_SEARCH_LOCAL和DEFAULT_KEYS_SEARCH_GLOBAL的使用,特别是全局搜索模式会调用手机的搜索应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

五种模式分别为:

DEFAULT_KEYS_DISABLE //通常模式,activity中按键不做响应
DEFAULT_KEYS_DIALER //拨号模式,activity中按键会打开拨号器
DEFAULT_KEYS_SHORTCUT //选项菜单的快捷模式,activity中按键会启动快键键
DEFAULT_KEYS_SEARCH_LOCAL //本地搜索模式,activity中按键会打开本地搜索  
DEFAULT_KEYS_SEARCH_GLOBAL //全局搜索模式,activity中按键会打开全局搜索


设置的代码如下:

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

        setDefaultKeyMode(DEFAULT_KEYS_SEARCH_GLOBAL);
    }


有人问没有调出软键盘怎么按键呢?因为现在的手机一般都没有硬件键盘,所以我们需要手动调出软键盘,代码如下。注意,不能通过EditText调出软键盘,因为此时按钮的点击事件只会分发到该控件,不会继续分发。

    @Override
    protected void onResume() {
        super.onResume();
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                InputMethodManager inputMethodManager=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
            }
        }, 1000);
    }

延迟一秒是为了保证Activity完全显示后再弹出软键盘。


下面介绍怎样使用DEFAULT_KEYS_SHORTCUT模式。

首先我们需要修改项目中的菜单配置文件(res/menu/main.xml),如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.myapplication.MainActivity">

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"
        android:alphabeticShortcut="A"/>

</menu>

android:alphabeticShortcut="A"的意思是,在选项菜单中ID为action_settings菜单项的快捷键为A。

然后修改MainActivity,代码如下:

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

        setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if(id == R.id.action_settings){
            Log.e("MainActivity", "settings action click");
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

如此,按下A键,即可看到日志输出。


关于DEFAULT_KEYS_SEARCH_LOCAL ,可阅读这篇文章:android之如何使用Android的搜索框架


设置DEFAULT_KEYS_SEARCH_GLOBAL ,会调用手机的搜索应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值