2013-10-07 16 views
1

我刚开始使用Android编程,想创建一个简单的Hang子手游戏,没有特别的噱头。 我的应用程序的布局如下所示:http://www.imagebanana.com/view/2cqs6lt3/Unbenannt.PNG 所以主要活动包含一个ImageView,它也显示游戏的当前状态,一个TextView用于显示要猜测的单词并在底部显示一个用于输入的keyboardView。keyboardview keycodes不工作

对于这个键盘我创建了一个自定义的键盘与此keyboard_layout.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<android.inputmethodservice.Keyboard xmlns:android="http://schemas.android.com/apk/res/android" > 

<Row 
    android:horizontalGap="1%p" 
    android:keyHeight="8%p" 
    android:verticalGap="0.7%p" > 
    <Key 
     android:codes="65" 
     android:keyLabel="A" android:keyEdgeFlags="left"/> 
    <Key 
     android:codes="66" 
     android:keyLabel="B" /> 
    <Key 
     android:codes="67" 
     android:keyLabel="C" /> 
    <Key 
     android:codes="68" 
     android:keyLabel="D" /> 
    <Key 
     android:codes="69" 
     android:keyLabel="E" /> 
    <Key 
     android:codes="70" 
     android:keyLabel="F" /> 
    <Key 
     android:codes="71" 
     android:keyLabel="G" /> 
    <Key 
     android:codes="72" 
     android:keyLabel="H" /> 
    <Key 
     android:codes="73" 
     android:keyLabel="I" android:keyEdgeFlags="right"/> 
</Row> 
<Row 
    android:horizontalGap="1%p" 
    android:keyHeight="8%p" 
    android:verticalGap="0.7%p" > 
    <Key 
     android:codes="74" 
     android:keyLabel="J" android:keyEdgeFlags="left"/> 
    <Key 
     android:codes="75" 
     android:keyLabel="K" /> 
    <Key 
     android:codes="76" 
     android:keyLabel="L" /> 
    <Key 
     android:codes="77" 
     android:keyLabel="M" /> 
    <Key 
     android:codes="78" 
     android:keyLabel="N" /> 
    <Key 
     android:codes="79" 
     android:keyLabel="O" /> 
    <Key 
     android:codes="80" 
     android:keyLabel="P" /> 
    <Key 
     android:codes="81" 
     android:keyLabel="Q" /> 
    <Key 
     android:codes="82" 
     android:keyLabel="R" android:keyEdgeFlags="right"/> 
</Row> 
<Row 
    android:horizontalGap="1%p" 
    android:keyHeight="8%p" 
    android:verticalGap="0.7%p" > 
    <Key 
     android:codes="83" 
     android:horizontalGap="2.5%p" 
     android:keyLabel="S" android:keyEdgeFlags="left"/> 
    <Key 
     android:codes="84" 
     android:keyLabel="T" /> 
    <Key 
     android:codes="85" 
     android:keyLabel="U" /> 
    <Key 
     android:codes="86" 
     android:keyLabel="V" /> 
    <Key 
     android:codes="87" 
     android:keyLabel="W" /> 
    <Key 
     android:codes="88" 
     android:keyLabel="X" /> 
    <Key 
     android:codes="89" 
     android:keyLabel="Y" /> 
    <Key 
     android:codes="90" 
     android:keyLabel="Z" android:keyEdgeFlags="right"/> 
</Row> 

keyboard_layout</android.inputmethodservice.Keyboard> 

,并传递给keyboardView:

public class MainActivity extends Activity { 
... 

private void setKeyboardView() { 
    Keyboard keys = new Keyboard(this, R.xml.keyboard_layout); 
    KeyboardView kv = (KeyboardView) findViewById(R.id.keyboard_view); 
    kv.setKeyboard(keys); 

    kv.setEnabled(true); 
    kv.setClickable(true); 

    OnKeyboardActionListener listener = new OnKeyboardActionListener() { 

     @Override 
     public void onKey(int primaryCode, int[] keyCodes) { 
     } 

     @Override 
     public void onPress(int primaryCode) { 
      TextView tv = (TextView) findViewById(R.id.text_view); 
      tv.setText("" + primaryCode); 
     } 

     @Override 
     public void onRelease(int primaryCode) { 
     } 

     @Override 
     public void onText(CharSequence text) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void swipeDown() { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void swipeLeft() { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void swipeRight() { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void swipeUp() { 
      // TODO Auto-generated method stub 

     } 

    }; 
    kv.setOnKeyboardActionListener(listener); 
} 

正如你可以看到我还添加了一个“OnKeyboardActionListener “它只是将按下按钮的keyCode传递给textView。

但是当我按下一个按钮时,无论我按什么按钮,监听器都会给出一个空引用。 (当我不将“primaryCode”转换为字符串时,应用程序崩溃。)除了“OnKeyboardActionListener”工作的“onPress”方法,当我将onPress方法中的代码放入onKey或onRelease方法什么都没有发生。

这里是我的MainActivity的布局XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<ImageView android:id="@+id/image_view" 
    android:contentDescription="@string/imgView" 
    android:layout_weight="3" 
    android:layout_height="0dp" 
    android:layout_width="match_parent" 
    android:background="@android:color/background_dark" 
    /> 

<TextView android:id="@+id/text_view" 
    android:layout_weight="1" 
    android:layout_height="0dp" 
    android:layout_width="fill_parent" 
    android:textSize="25sp" 
    android:gravity="center" 
    android:hint="@string/textview_hint" 
    android:background="@android:color/background_dark" 
    /> 

<android.inputmethodservice.KeyboardView android:id="@+id/keyboard_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

</LinearLayout> 

所以我一派,并尝试了不同的设置,但没有任何帮助:( 请问你们谁可以帮我解决这个问题 而且是什么呢?通常一个好主意,显示keyBoardView永久像我想这样做在我的计划

问候 rakumbo

回答

0

尝试:?

StringBuilder mComposing = new StringBuilder(); 

String value = mComposing.append((char) primaryCode); 

更改这里

@Override 
     public void onPress(int primaryCode) { 
      TextView tv = (TextView) findViewById(R.id.text_view); 
      tv.setText("" + value); 
     } 

布局/ input.xml中

<android.inputmethodservice.KeyboardView android:id="@+id/keyboard_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

键盘

Keyboard keys = new Keyboard(this, R.xml.keyboard_layout); 
    KeyboardView mInputView = (KeyboardView) getLayoutInflater().inflate(
        R.layout.input, null); 
      mInputView.setOnKeyboardActionListener(this); 
      mInputView.setKeyboard(keys);