android-setOnClickListener;

我一直在处理Snake示例代码,为了进行培训,我试图对其进行修改,并希望加深对Android工作原理的理解.

到目前为止,我已经按照以下方法添加了两个按钮,分别对应了setOnClickListener代码.

snake_layout.xml:

          <Button
         android:layout_height="39px"
         android:layout_width="55px" 
         android:layout_marginLeft="15px"
         android:text="Left"
         android:id="@+id/left_button" />

      <Button
         android:layout_height="39px" 
         android:layout_width="55px" 
         android:layout_marginLeft="240px"
         android:text="Right"
         android:id="@+id/right_button" />

和Snake.java:

.
.
.
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // No Title bar
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.snake_layout);

    final Button leftButton = (Button) findViewById(R.id.left_button);
    leftButton.setOnClickListener(new Button.OnClickListener() {  
        public void onClick(View v)
            {
                //perform action
            }
         });

    final Button rightButton = (Button) findViewById(R.id.right_button);
    rightButton.setOnClickListener(new Button.OnClickListener() {  
        public void onClick(View v)
            {
                //perform action
            }
         });
.
.
.

当我尝试一种简单的方法(例如“ finish()”)时,这两个按钮都会显示它们应该在的位置并可以工作.

现在,我想做的就是让这些按钮触发下面的代码,
在SnakeView.java中:

        if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
        if (mDirection != EAST) {
            mNextDirection = WEST;
        }
        return (true);
    }

    if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
        if (mDirection != WEST) {
            mNextDirection = EAST;
        }
        return (true);
    }

为了清楚起见,我需要让我的自定义屏幕按钮执行与当前代码中的“ KEYCODE_DPAD_RIGHT”和“ KEYCODE_DPAD_LEFT”相同的工作.
我的Xperia X10i没有DPAD,这是它的一部分;-P

我真的很感谢在正确方向上的一些指导.您可能已经猜到我对此还很陌生.

在此先感谢大家

解决方法:

在这里检查:

Throwing/Simulating KeyStrokes programatically

基本逻辑隐藏在后面:

private void doInjectKeyEvent(KeyEvent kEvent) {
    try {
        /* Inject the KeyEvent to the Window-Manager. */
        windowManager.injectKeyEvent(kEvent.isDown(), kEvent.getKeyCode(),
            kEvent.getRepeatCount(), kEvent.getDownTime(),
            kEvent.getEventTime(), true);
    } catch (DeadObjectException e) {
        e.printStackTrace();
    }
}
上一篇:限制input输入类型(多种方法实现)


下一篇:JavaScript-e.keyCode不起作用