活动或视图未收到 Android 字母数字密钥



我希望在Activity的物理键盘上按下数字或字母时收到通知。我在 Android Studio 中创建了一个简单的应用程序,其中包含一个具有单个视图的活动。 输入、删除等都收到了,但不是实际的字母或数字。 我不想使用TextViewEditText的观点。 我只是希望能够使用简单的视图查看击键。 任何帮助,不胜感激。

这是代码:

public class MainActivity extends AppCompatActivity {
public static final String TAG = "My Activity";
TextView view;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    view = (View)findViewById(R.id.view);
    view.setOnKeyListener(new EditText.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            Log.d(TAG, "onKey " + keyCode);
            return false;
        }
    });
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    Log.d(TAG, "KEY PRESSED " + keyCode);
    return super.onKeyDown(keyCode, event);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    Log.d(TAG, "DISPATCH KEY" + event.getKeyCode());
    return super.dispatchKeyEvent(event);
}
}

布局为:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.plexistream.myapplication.MainActivity">
<View
    android:id="@+id/view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    />
</android.support.constraint.ConstraintLayout>

按如下方式尝试使用focus

this.requestFocus();
this.setFocusableInTouchMode(true);

好的,看起来这是我使用的模拟器的问题。 NoxPlayer没有传递这些密钥。 我切换到BlueStacks,我不再有问题了。

最新更新