快捷搜索:

Android IMF的一处瑕疵

Android IMF供给了实现第三方输入法的快捷通道,这个框架基能够满意一样平常输入法的开拓必要,显然设计者对付IMF照样投入了不少精力。然则任何的设计都弗成能是精致绝伦, 设计者并非是万能的神,所有的方面他都斟酌到,总有一些地方做的不敷好,留下一些瑕疵。在我的事情傍边,就发清楚明了这么一个不尽人意的地方。

Android IME

此前受客户委托,开拓一个输入法,此中有一个要求,即DELETE键和其他按键不一样,背景要差别于其他通俗按键。这意味着我们法度榜样应该达到这样一个效果,每个按键自力享有背景设置。

经由过程IMF的阐发可以知道,KeyboardView的XML属性android:keyBackground,可以为按键定义背景。纵不雅Android PinyinIME,即谷歌拼音输入法,其每个按键的背景都是相同的,彷佛它并没有想到零丁为按键设置背景。

进而查看它的源码,加倍印证我的预测,在KeyboardView类的onBufferDraw措施中可以看到背景的绘制措施:

for (int i = 0; i < keyCount; i++) {

final Key key = keys[i];

if (drawSingleKey && invalidKey != key) {

continue;

}

int[] drawableState = key.getCurrentDrawableState();

keyBackground.setState(drawableState);

// Switch the character to uppercase if shift is pressed

String label = key.label == null? null : adjustCase(key.label).toString();

final Rect bounds = keyBackground.getBounds();

if (key.width != bounds.right ||

key.height != bounds.bottom) {

keyBackground.setBounds(0, 0, key.width, key.height);

}

canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop);

keyBackground.draw(canvas);

// 省去残剩部分

}

您可能还会对下面的文章感兴趣: