# 如何实现自定义的软键盘
有时需要把软键盘嵌入到窗口内部(比如计算器和密码输入等),这时可以使用自定义软键盘。
### 一、编辑器设置 input_type 为"custom"(它会禁止内置的软键盘)。
```
```
> 如果希望初始化时编辑器自动获的焦点,可以设置 focused 为 true。
### 二、软键盘的按钮放入一个 view(任何容器控件均可)中,并将 view 的 is\_keyboard 设置为 true。
```
```
### 三、处理按钮事件
#### 1. 处理正常按键
```
static ret_t on_send_key(void* ctx, event_t* e) {
widget_t* button = WIDGET(e->target);
char text[2];
text[0] = (char)button->text.str[0];
text[1] = '\0';
input_method_commit_text(input_method(), text);
return RET_OK;
}
```
#### 2. 处理删除键
```
static ret_t on_backspace(void* ctx, event_t* e) {
input_method_dispatch_key(input_method(), TK_KEY_BACKSPACE);
return RET_OK;
}
```
>如果你不希望出现编辑器的光标,可以使用 label 控件代替 edit 控件,输入和删除时直接操作 label 的 text。
参考:
* [demo\_ui\_app.c](https://github.com/zlgopen/awtk/blob/master/demos/demo_ui_app.c)
* [soft\_keyboard.xml](https://github.com/zlgopen/awtk/blob/master/design/default/ui/soft_keyboard.xml)