从滚动视图打开子视图

Posted

技术标签:

【中文标题】从滚动视图打开子视图【英文标题】:Opening childview back from scrollview 【发布时间】:2010-10-28 14:38:45 【问题描述】:

我有一个父 ScrollView 有一个子视图。当用户按下后退按钮时,我希望子视图处理事件。我尝试了几件事,但似乎都没有。按后退按钮会终止活动。

public class GameScrollView extends ScrollView

     public GameScrollView(Context context) 
          super(context);
     
     @Override
     public boolean onInterceptTouchEvent (MotionEvent ev)
          return false;

     
     @Override
     public boolean onKeyDown (int keyCode, KeyEvent event)
          return false;

     

在子视图中我有以下代码

public class GameView extends View implements OnTouchListener, onKeyListener

     public boolean onKey(View v, int keyCode, KeyEvent event)
          if(keyCode == KeyEvent.KEYCODE_BACK)
                    //do stuff
          
          invalidate();
          return true;        
     

ScrollView 中,我也尝试过覆盖dispatchKeyEvent 方法以返回false,但这也不起作用。我在这里做错了什么?

谢谢!

【问题讨论】:

【参考方案1】:
@Override 
public boolean onKeyDown(int i, KeyEvent event) 

      if (i == KeyEvent.KEYCODE_BACK) 
          return true;
        else 
          super.onKeyDown(i, event);
          return true;
        
      
      return false;
    

另外,我认为您必须拦截活动中的按键,而不是视图。

【讨论】:

如果我在activity中拦截了按键,我将如何将它发送到视图进行处理?视图需要根据按键进行一些绘图。谢谢。【参考方案2】:

我想通了。这不起作用的原因是子视图没有焦点。

在子视图的构造函数中设置requestFocus()属性解决了这个问题。

【讨论】:

以上是关于从滚动视图打开子视图的主要内容,如果未能解决你的问题,请参考以下文章

画外音模式 - 滚动到在滚动视图中关闭的子视图

如何与作为滚动视图子视图的水平滚动视图交互?

在Subview位置选择滚动视图子视图滚动

滚动视图不在自动布局中滚动子视图

如何让滚动视图子视图响应滚动

使用静态和滚动子视图实现视图