2014-09-18 21 views
11

Używam klawiatury, aby mieć własną klawiaturę.Wyskakuj o naciśnięciu klawisza w niestandardowej klawiaturze

działa poprawnie, ale nie mogę tego zrobić efekt powiększenia wciśnięty klawisz, podobnie jak klawiatury systemu Android

zoom image

Są to elementy, które używają

<android.inputmethodservice.KeyboardView 
     android:id="@+id/keyboardview" 
     style="@style/Widget.KeyboardView" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 
     android:shadowRadius="0" 
     android:visibility="visible" /> 

.

<style name="Widget.KeyboardView" parent="android:Widget.KeyboardView"> 
      <item name="android:background">@drawable/naranja</item> 
      <item name="android:keyBackground">@drawable/naranja</item> 
      <item name="android:keyTextSize">40sp</item> 
      <item name="android:keyTextColor">#d35400</item> 
      <item name="android:keyPreviewLayout">@layout/keyboard_popup_keyboard</item> 
      <item name="android:keyPreviewOffset">12dp</item> 
      <item name="android:keyPreviewHeight">80dp</item> 
      <item name="android:popupLayout">@layout/keyboard_popup_keyboard</item> 
     </style> 

.

XML/popup:

<?xml version="1.0" encoding="utf-8"?> 
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" 
    android:keyWidth="10%p" 
    android:keyHeight="10%p"> 
</Keyboard> 

Wiersze

 <Key 
       android:codes="81" 
       android:keyEdgeFlags="left" 
       android:keyLabel="Q" 
       android:popupCharacters="Q" 
       android:popupKeyboard="@xml/popup" /> 

    etc... 

Próbowałem metodą onkey, również z XML. Ale bez powodzenia.

Odpowiedz

11

Aby wyświetlić tylko powiększone podglądy, domyślnie powinno być robione KeyboardView. Nie chcesz ustawiać wartości popupKeyboard, tak jak w przypadku specjalnej mini klawiatury wyświetlanej na długich naciśnięciach.

Zakładam, że podążałeś za this tutorial. Należy wziąć pod uwagę tych linii w sekcji 3.3:

// Do not show the preview balloons 
mKeyboardView.setPreviewEnabled(false); 

Zamiast ustawić na true.

Kompletne rozwiązanie

W układzie swoją aktywność w:

<android.inputmethodservice.KeyboardView 
    android:id="@+id/keyboardview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:keyPreviewOffset="12dp" 
    android:keyPreviewLayout="@layout/kbpreview" 
    android:visibility="visible" /> 

Istotne właściwości są tu keyPreviewLayout, keyPreviewOffset i keyPreviewHeight.

układ/kbpreview.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:gb="http://schemas.android.com/apk/res-auto" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:background="@color/red" 
    android:textSize="30dp" /> 

xml/kb.xml

<?xml version="1.0" encoding="utf-8"?> 
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" 
    android:keyWidth="12.50%p" 
    android:keyHeight="10%p" > 

    <Row> 
     <Key android:codes="55" android:keyLabel="7" android:keyEdgeFlags="left" /> 
     <Key android:codes="56" android:keyLabel="8" /> 
     <Key android:codes="57" android:keyLabel="9" /> 
     <Key android:codes="65" android:keyLabel="A" android:horizontalGap="6.25%p" /> 
     <Key android:codes="66" android:keyLabel="B" /> 
     <Key android:codes="55006" android:keyLabel="CLR" android:keyEdgeFlags="right"/> 
    </Row> 

    <!-- and whatever else... --> 

</Keyboard> 

W kodzie działalności

Keyboard mKeyboard = new Keyboard(this, R.xml.kb); 

    // Lookup the KeyboardView 
    KeyboardView mKeyboardView = (KeyboardView) findViewById(R.id.keyboardview); 

    // Attach the keyboard to the view 
    mKeyboardView.setKeyboard(mKeyboard); 

    // Key listener required 
    mKeyboardView.setOnKeyboardActionListener(myListener); 

Wynik

z '5' wciśniętego klawisza:

enter image description here

Można również stwierdzić, że warto zapoznać się z KeyboardView source code.

+0

Chcę pokazać keyprewview onLong Naciśnij wydarzenie z klawiatury jest to możliwe –