Подтвердить что ты не робот

Специальная клавиатура с клавиатурой Android при длительном нажатии

У меня есть пользовательская клавиатура Android:

    public class CustomKeyboard extends Keyboard{...}  

    public class CustomKeyboardView extends KeyboardView{...}

    public class CustomKeyboardIME extends InputMethodService implements KeyboardView.OnKeyboardActionListener{...}  

На некоторых клавишах у меня есть popupKeyboard и popupCharacters:

<Key android:codes="144" android:keyLabel="0" android:popupKeyboard="@xml/key_popup" android:popupCharacters=")" android:keyEdgeFlags="right"/>

XML/key_popup.xml:

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
      android:keyWidth="10%p"
      android:horizontalGap="0px"
      android:verticalGap="0px"
      android:keyHeight="@dimen/key_height" >
</Keyboard>

Но когда я нажимаю кнопку "0", появляется всплывающее окно с ")", но оно остается там до тех пор, пока я не нажму кнопку "X" или ")". Это выглядит так:
My keyboard

И я хочу, чтобы он был открыт только тогда, когда я держу палец. Что-то вроде на клавиатуре Samsung или HTC:
Samsung keyboard

Кто-нибудь может мне помочь?

EDIT Возможно ли изменить внешний вид этого всплывающего окна? Я хочу, чтобы у него был тот же фон и клавиши, что и вся клавиатура, которую я создал/

4b9b3361

Ответ 1

Вы можете использовать класс PopupWindow и заполнить его с помощью настраиваемого макета.

View custom = LayoutInflater.from(context)
    .inflate(R.layout.your_layout, new FrameLayout(context));
PopupWindow popup = new PopupWindow(context);
popup.setContentView(custom);

и при длительном нажатии

//Get x,y based on the touch position
//Get width, height based on your layout
if(popup.isShowing()){
    popup.update(x, y, width, height);
} else {
    popup.setWidth(width);
    popup.setHeight(height);
    popup.showAtLocation(yourKeyboardView, Gravity.NO_GRAVITY, x, y);
}

При щелчке по всплывающему окну вы можете отклонить его

popup.dismiss();