问题描述
- Android自定义Button的OnKeyDown方法没反应
-
代码如下:
自定义Button类
public class MyButton extends Button{
public MyButton(Context context,AttributeSet set) {
super(context,set);
}@Override public boolean onKeyDown(int keyCode, KeyEvent event) { super.onKeyDown(keyCode,event); TextView tv = (TextView) findViewById(R.id.aa); tv.setText("123232323"); Log.v("111","2222"); return super.onKeyDown(keyCode, event); }
}
界面xml代码:
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:orientation="vertical"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"><TextView android:id="@+id/aa" android:layout_width="match_parent" android:layout_height="wrap_content" /> <com.example.cg.view.MyButton android:layout_width="match_parent" android:layout_height="wrap_content" />
解决方案
onKeyDown方法监听的是按下系统的Home键,后退键等的监听,
你这是要实现点击按钮改变另外一个TextView的文字吧,直接写个Button再setOnClickListener不行吗?
或者说非要自定义一个Button的话在构造方法中调用setOnClickListener(this),然后在你的MyButton类中实现OnClick方法也可以,不过没什么必要
解决方案二:
public class ****Acticity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyButton mybutton = new MyButton(this);
mybutton.setFocusable(true);
setContentView(mybutton);
}
}
点击没效果,是因为Activity也有onKeyDown,你在view中设置了onKeyDown,点击时,系统不知道要响应哪一个。你给button添加一个焦点。
解决方案三:
http://www.apkbus.com/forum.php?mod=viewthread&tid=251929&extra=page%3D1&_dsign=2a4e40c3
解决方案四:
Activity中提供了这个方法,可以让你重写。这个基于回调的事件,只有当按下键盘键,并且别的地方没有处理,才会传递给activity。一般的button是不会响应这个事件的,明白了吧。
解决方案五:
我猜你想写的是onTouchEvent