Android 基于回调的事件处理范例程序测试不过,自定义MyButton类的onKeyDown无法触发

happyliuliming 2017-08-30 12:19:47
在学习疯狂Android讲义,第三章, 自定义View时重写View的事件处理方法,但是好像没有用。

代码如下

//Mybutton.java
package com.home.lemon.callbackhandler;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Button;
import android.widget.TextView;

import org.w3c.dom.Text;

/**
* Created by think on 2017/8/29.
*/

public class MyButton extends android.support.v7.widget.AppCompatButton {
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
super.onKeyDown(keyCode,event);
Log.v("com.home.lemon","the onKeyDown in MyButton");
return false;
}
}

//main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!--使用自定义的View时应使用全限定类名-->
<com.home.lemon.callbackhandler.MyButton
android:id="@+id/bn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Click me"/>
</LinearLayout>

//MainActivity.java
package com.home.lemon.callbackhandler;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v("com.home.lemon","MyButton onCreate");
}
}



...全文
221 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
辉_alexxm 2017-08-31
  • 打赏
  • 举报
回复
用你写代码的键盘,试下,我测试时是OK的
辉_alexxm 2017-08-30
  • 打赏
  • 举报
回复
经测试 是可以正常运行的; 请注意几个概念: 1、onKeyDown 是按键按下,不是鼠标按下, 2、通过上下左右键先让焦点移到 按钮 上, 就正常测试,注意home 键 不触发,可测试电脑本身的键盘! 3、鼠标 的代码如下: @Override public boolean onTouchEvent(android.view.MotionEvent event) { Log.v("com.home.lemon","the onTouchEvent in MyButton = "+event.getAction()); switch (event.getAction()) { case android.view.MotionEvent.ACTION_DOWN://0 Log.e("com.home.lemon", "LinearLayout onTouchEvent Down"); break; case android.view.MotionEvent.ACTION_UP://1 Log.e("com.home.lemon", "LinearLayout onTouchEvent onTouch Up"); break; case android.view.MotionEvent.ACTION_MOVE://2 Log.e("com.home.lemon", "LinearLayout onTouchEvent Move"); break; } return super.onTouchEvent(event); }
happyliuliming 2017-08-30
  • 打赏
  • 举报
回复
谢谢,另外请问,模拟器AVD里出来的没有方向按键怎么办?Android stduio 2.3.3

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧