五种模式分别为:
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的搜索框架。