2 つのビューを含むアクティビティがあります。1 つのビューが onDraw をオーバーライドし、onTouchEvent を正しく処理します。しかし、2 番目のビューの onKeyDown を取得しようとすると、何も表示されません。代わりに、戻るボタンまたはその他のキーボード ボタンを押すと、onKeyDown が呼び出されます。これはエミュレータでテストされました。
LinearLayout を拡張するカスタム キーパッド ビュー クラスである 2 番目のビューの onKeyDown を取得したいのですが、どうすればこれを行うことができますか? すでに setFocusable(true) と setFocusableInTouchMode(true) を試しましたが、うまくいきません。mySecondView.bringToFront() も試しましたが、成功しませんでした。
どんな助けでも大歓迎です。
編集 - メイン アクティビティの 2 番目のビューに onClickListener を追加しようとしました。呼ばれませんでした。
public class TrialActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(TRIALTAG,"Inside on create");
setContentView(R.layout.trial_activity);
keypadView = findViewById(R.id.keypad);
selNumber = 0;
keypadView.bringToFront();
keypadView.setFocusable(true); //NOT WORKING
keypadView.setFocusableInTouchMode(true); //NOT WORKING
keypadView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// NOT WORKING
Log.d(TRIALTAG,"Inside on click on the keypad");
}
});
}
public class TrialView extends View{
@Override
public boolean onTouchEvent(MotionEvent event){ //IS GETTING CALLED
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
selX = (int)event.getX();
selY = (int)event.getY();
Log.d(TTAG,"Touch X : " + selX + " Touch Y : " + selY);
getRect(selX, selY);
}
return true;
}
....
}
public class CustomKeyPad extends LinearLayout{
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
Log.d(KTAG, "Inside keypad on key down"); //NOT GETTING CALLED
switch(keyCode){
case KeyEvent.KEYCODE_1:selectedNumber = 1;
isNumberSelected = true;
break;
default:selectedNumber = 0;
isNumberSelected = false;
break;
}
if(isNumberSelected == true){
Log.d(KTAG, "Is selected is true calling update puzzle");
trialActivity.updatePuzzle(selectedNumber);
}
return true;
}
編集 2 - CustomKeypad ビュー クラスに setOnTouchListener を配置した後、このビュー内の任意のボタンをクリックすると、TrialBoard ビュー クラスの onTouchEvent() が呼び出され、キーの周囲の任意の場所をクリックすると、CustomKeypad ビュー内であることがわかりました。実際に私のメインアクティビティで onTouchListener をトリガーしました...なぜこれが起こっているのかわかりません...:(