問題描述
我開發了一個 android 自定義鍵盤,它看起來幾乎就像原來的鍵盤之一.它還有特殊的鍵可以在字母/數字和班次之間切換.除了SPACE"鍵(底部的大條)之外,所有鍵似乎都可以正常工作.我可以按中間的空格鍵但觸摸左右區域(大約是空格鍵寬度的 1/3)不被識別為觸摸.
I have developed an android custom keyboard which looks almost like one of the original ones. It has also special keys to switch between letters / numbers and shift. all keys seem to work perfectly except the "SPACE" key (the large bar at the bottom). I am able to hit the space bar in the middle but touches on areas on the right and left (appr. 1/3 of the width of the space bar) are not recognized as touches.
我已經嘗試為空格鍵使用另一個鍵碼/圖標,甚至將空格鍵放在鍵盤的另一行,以查看它是否特定于該鍵或行.但似乎自定義鍵盤上的鍵可以具有一般的最大"寬度......?我也可以在所有布局中重現(縱向/橫向/布局-大...).
I already tried to use another keycode / icon for the space bar or even place the spacebar in another row of the keyboard to see if it is specific to that key or row. But it seems there is a general "maximum"-width a key on a custom keyboards can have...? I'ts also reproducable in all layouts (portrait / landscape / layout-large ...).
下面是我的 keypad.xml 文件來定義我的鍵盤.有誰知道這個問題/限制?
Below is my keypad.xml file to define my keyboard. Does anyone know about this issue / limitation?
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="35dp"
android:horizontalGap="3dp"
android:verticalGap="0.2%p"
android:keyHeight="9%p">
<Row android:keyWidth="9%p" >
<Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
<Key android:codes="119" android:keyLabel="w"/>
<Key android:codes="101" android:keyLabel="e"/>
<Key android:codes="114" android:keyLabel="r"/>
<Key android:codes="116" android:keyLabel="t"/>
<Key android:codes="122" android:keyLabel="z"/>
<Key android:codes="117" android:keyLabel="u"/>
<Key android:codes="105" android:keyLabel="i"/>
<Key android:codes="111" android:keyLabel="o"/>
<Key android:codes="112" android:keyLabel="p" />
</Row>
<Row android:keyWidth="9%p" >
<Key android:codes="97" android:keyLabel="a" android:horizontalGap="5%p"
android:keyEdgeFlags="left"/>
<Key android:codes="115" android:keyLabel="s"/>
<Key android:codes="100" android:keyLabel="d"/>
<Key android:codes="102" android:keyLabel="f"/>
<Key android:codes="103" android:keyLabel="g"/>
<Key android:codes="104" android:keyLabel="h"/>
<Key android:codes="106" android:keyLabel="j"/>
<Key android:codes="107" android:keyLabel="k"/>
<Key android:codes="108" android:keyLabel="l"/>
</Row>
<Row android:keyWidth="9%p" >
<Key android:isSticky="true" android:codes="-2" android:keyLabel="▲" />
<Key android:codes="121" android:keyLabel="y"/>
<Key android:codes="120" android:keyLabel="x"/>
<Key android:codes="99" android:keyLabel="c"/>
<Key android:codes="118" android:keyLabel="v"/>
<Key android:codes="98" android:keyLabel="b"/>
<Key android:codes="110" android:keyLabel="n"/>
<Key android:codes="109" android:keyLabel="m"/>
<Key android:codes="-5" android:keyIcon="@drawable/sym_keyboard_delete"
android:keyWidth="19%p" android:keyEdgeFlags="right"
android:isRepeatable="true" android:horizontalGap="1.5%p"/>
</Row>
<Row android:horizontalGap="3dp"
android:verticalGap="3dp">
<!-- <Key android:codes="-1" android:keyLabel="123" android:keyWidth="10%p"/> -->
<Key android:codes="-1" android:keyLabel="SYM" android:keyWidth="10%p"/>
<Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
android:keyWidth="68%p" android:isRepeatable="true"/>
<Key android:codes="-11" android:isRepeatable="true" android:keyIcon="@drawable/sym_keyboard_enter" android:keyWidth="19%p" android:keyEdgeFlags="right"/>
</Row>
</Keyboard>
推薦答案
問題似乎是來自 Keyboard#getNearestKeys 的方法為寬按鈕返回了正確的值.我通過擴展 Keyboard 類并覆蓋 getNearestKeys 方法解決了這個問題
The problem seems to be that the method from Keyboard#getNearestKeys dosent return proper values for wide buttons. I solved the problem by extending the Keyboard class and overriding the getNearestKeys method
這是我添加的代碼:
@Override
public int[] getNearestKeys(int x, int y) {
List<Key> keys = getKeys();
for (int i = 0; i < keys.size(); i++) {
if (keys.get(i).isInside(x, y)) return new int[]{i};
}
return new int[0];
}
這篇關于android自定義鍵盤:空格鍵的觸摸區域未完全覆蓋的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!