速读原著-Android应用开发入门教程(键盘事件的响应)

6.2 键盘事件的响应

在应用的程序的控制方面,更多的使用的是屏幕上的控件,但是有的时候也需要直接对键盘事件来进行响应。键盘是 Android 中主要的输入设备,对按键的响应的处理是响应之间在程序中使用键盘的核心内容。

本例需要实现的内容是通过键盘来控制屏幕上的一个图片的 Alpha 值,使用上键和右键增加图片的 Alpha 值,使用下键和左键减少图片的 Alpha 值。显示内容如下所示:
在这里插入图片描述
在这里插入图片描述
本例的布局文件 testkeyevent.xml 如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
	 android:id="@+id/screen" 
	 android:layout_width="fill_parent" 
	 android:layout_height="fill_parent" 
	 android:orientation="vertical"> 
 <TextView android:id="@+id/alphavalue" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" 
	 android:layout_gravity="center"/> 
 <ImageView android:id="@+id/image" 
	 android:src="@drawable/robot" 
	 android:layout_gravity="center" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" /> 
</LinearLayout>

本例包含了一个文本框和一个显示图片的控件,这样可以文本框用作显示当前的 Alpha 的比例值,显示图片的控件 ImageView 用于显示一个图片。

本例的源代码实现如下所示:

public class TestKeyEvent extends Activity {
    private static final String TAG = "TestKeyEvent";
    private ImageView mImage;
    private TextView mAlphavalueText;
    private int mAlphavalue;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testkeyevent);
        mImage = (ImageView) findViewById(R.id.image);
        mAlphavalueText = (TextView) findViewById(R.id.alphavalue);
        mAlphavalue = 100;
        mImage.setAlpha(mAlphavalue);
        mAlphavalueText.setText("Alpha = " + mAlphavalue*100/0xff + "%");
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent msg){
        Log.v(TAG, "onKeyDown: keyCode = "+ keyCode);
        Log.v(TAG, "onKeyDown: String = " + msg.toString());
        switch (keyCode) {
            case KeyEvent.KEYCODE_DPAD_UP:
            case KeyEvent.KEYCODE_DPAD_RIGHT:
                mAlphavalue += 20;
                break;
            case KeyEvent.KEYCODE_DPAD_DOWN:
            case KeyEvent.KEYCODE_DPAD_LEFT:
                mAlphavalue -= 20;
                break;
            default:
                break;
        }
        if(mAlphavalue>=0xFF)mAlphavalue = 0xFF;
        if(mAlphavalue<=0x0)mAlphavalue = 0x0;
        mImage.setAlpha(mAlphavalue);
        mAlphavalueText.setText("Alpha = " + mAlphavalue*100/0xff + "%");
        return super.onKeyDown(keyCode, msg);
    }
}

本例子使用 onKeyDown()函数来获得按键的事件,同类的函数还包括 onKeyUp()函数,其参数 int keyCode 为按键码,KeyEvent msg 表示按键事件的消息(其中包含了更详细的内容)。

上面打出的 log 信息为:

VERBOSE/TestKeyEvent(771): onKeyDown: keyCode = 20 
VERBOSE/TestKeyEvent(771): onKeyDown: String = KeyEvent{action=0 code=20 repeat=0 meta=0 scancode=108 mFlags=8}

基本上通过 keyCode 可以获得是哪一个按键响应,而通过 msg 除了按键码之外,可以获得按键的动作(抬起、按下)、重复信息,扫描码等内容。

KeyEvent 主要包含以下一些接口:

final int getAction() // 获得按键的动作
final int getFlags() // 获得标志
final int getKeyCode() // 获得按键码
final int getRepeatCount() // 获得重复的信息
final int getScanCode() // 获得扫描码

通过 KeyEvent 接口,可以获得按键相关的详细信息。

发布了1024 篇原创文章 · 获赞 810 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42528266/article/details/103926919