在子视图中处理BACK键事件,而不是在活动中处理

时间:2012-04-03 04:00:20

标签: android android-view

在我的应用中,用户可以点按图片缩略图以查看完整尺寸的版本。当点击缩略图时,在代码中创建一堆新视图(即没有XML),附加在视图层次结构的末尾并且发生一些缩放和旋转转换,然后显示图像的全尺寸,高分辨率版本。点击完整大小的图像会反转过渡并从视图层次结构中删除新视图。

我希望用户也可以按BACK键来反转图像过渡。但是,我似乎无法抓住KeyEvent。这就是我现在正在尝试的事情:

        // Set a click listener on the image to reverse everything
        frameView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0)
            {
                zoomOut(); // This works fine
            }
        });

        // Set the focus onto the frame and then set a key listener to catch the back buttons
        frameView.setFocusable(true);
        frameView.setFocusableInTouchMode(true);
        frameView.requestFocus();
        frameView.setOnKeyListener(new OnKeyListener() {

            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event)
            {
                // The code never even gets here !!!
                if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)
                {
                    zoomOut();
                    return true;
                }
                return false;
            }
        });

编辑:我有几个人提供代码片段的答案,可以在扩展Activity的类中使用。我上面复制的代码存在于一个在多个活动中实例化的类中;我的目标是让代码监听并在一个地方捕获BACK键事件(比如OnClickListener()),而不是必须在每个活动中都有它(并从每个活动创建长而笨重的引用到缩放对象)。

2 个答案:

答案 0 :(得分:4)

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK)
{
//Your logic or stuff
return true;
}
else
return super.onKeyUp(keyCode, event);
}

使用上述覆盖方法处理Back键按事件

在这些场景中使用如下 1)创建如下的活动::

/**
 * Top Activity that extends all Activity
 */
package com.com.com;//change your package name

import android.app.Activity;
import android.view.KeyEvent;


public class TopActivity extends Activity {
    protected BaseActivity _activity;


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode == KeyEvent.KEYCODE_BACK){
            //your stuff if you wanna to have anything
            return true;
        }
        else
            return super.onKeyDown(keyCode, event);
    }
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode == KeyEvent.KEYCODE_BACK)
        {
            //your stuff if you wanna to have anything
            return true;
        }
        else
            return super.onKeyUp(keyCode, event);
    }

}

2)现在,在您的代码中,您的每个活动都会扩展Acitivity,因此请更改它以便扩展TopActivity,如下所示:

public class YourActivity extends TopActivity {

//每个活动的正常代码...... }

多数民众赞成......现在就试试

答案 1 :(得分:0)

尝试使用

公共类动态扩展活动{

@Override
public void onBackPressed() {
    // Stuff
}

}