0

在我的 android 应用程序中,我使用自定义视图加载为活动的视图。现在我想检测用户是否单击菜单按钮。希望下面的代码将解释该场景。

我的自定义视图类:

 public class LibraryHomeView extends LinearLayout implements OnKeyListener {
//variable dec goes here..
public LibraryHomeView(Context context, AttributeSet attrs) {
    super(context, attrs);  

    init(context,attrs);
}

private void init(Context con,AttributeSet att) {
    //custom view implementation goes here...
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
         Log.d(TAG, "KeyEvent.KEYCODE_MENU");
            return true;
        }

}

我的问题是我不想从活动类中捕获这个事件我想从视图类中捕获它但是当我按下菜单键时它不会出现方法。有什么OnKey()帮助吗?

4

2 回答 2

0

如果您可以在活动中捕获关键事件,那么将其传递给视图很简单。只需从活动中调用视图内的方法。你可能有这样的东西(我这台电脑上没有eclipse,所以我直接在浏览器中编码——我可能有语法错误):

public class LibraryHomeView extends LinearLayout {

//......

    public void keyEventRecieved(String eventMessage) {
        Log.d(TAG, eventMessage);
    }
//.......
}

在活动内部:

public class myActivity extends Activity {
LibraryHomeView control;
//......
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        control = (LibraryHomeView)findViewById(R.id.myCustomViewId);
    }

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_MENU) {
             Log.d(TAG, "KeyEvent.KEYCODE_MENU");
             control.keyEventRecieved("Yahooooo!");
                return true;
            }

    }



//......

}
于 2012-07-10T06:50:18.370 回答
0

尝试这个,

public boolean onKeyUp(int keyCode, KeyEvent event) {
   if (keyCode == KeyEvent.KEYCODE_MENU) {
        // do something...
   }
    return true;
   }

编辑

public class LibraryHomeView extends LinearLayout {

     public LibraryHomeView(Context context) {
     super(context);
     // TODO Auto-generated constructor stub
   setFocusable(true);
  }
于 2012-07-10T06:24:38.127 回答