【问题标题】:Call method any time a view is tapped Android - Java每次点击视图时调用方法 Android - Java
【发布时间】:2015-09-03 19:58:36
【问题描述】:

有没有办法在活动中发生触摸时调用一个方法并获取它的 id?

我有一个添加到相关布局的自定义视图,然后只要在该自定义视图之外注册点击,我就想隐藏自定义视图。解决此问题的最佳方法是什么。

我尝试在相对布局中添加oncliecllistner,但这不起作用,因为它只在相对布局上注册了点击,所以当我点击作为相对布局的子级的 textview 时,它没有被调用。而且由于自定义视图和相对布局在我点击自定义视图时有时会重叠,它会注册为相对布局上的点击

谢谢

【问题讨论】:

  • “我尝试将 onclieclilistner 添加到相对布局,但没有奏效。” - 请发布您的代码并解释究竟是什么不起作用。
  • 将 onClickListener 添加到您的 RelativeLayout 以隐藏您的自定义视图。这将使单击您的自定义视图也将其隐藏,因此将 onClickListener 添加到您的自定义视图中只是为了拦截单击事件。
  • @Gudin 如果我在自定义视图中添加监听器,我怎么知道何时在自定义视图之外点击以隐藏它?
  • 为您的顶视图添加另一个监听器(例如,代表整个屏幕的相对布局)。
  • @Gudin 我最初所做的是将点击监听器添加到相关布局中

标签: java android onclicklistener gesture


【解决方案1】:

一种方法是添加一个透明的空 View(让我们给它 id overlayView)覆盖布局中的所有内容,除了您想要隐藏的视图(让我们给那个 id bashful):

<RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <!--
         All your existing non-bashful Views must be here, *before* overlayView.
         That gives them a lower Z-order than overlayView.
     -->

    <View
        android:id="@+id/overlayView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />

    <!-- The bashful View must come last, so that it has the highest Z-order. -->
    <View
        android:id="@+id/bashful"
        ...
    />
</RelativeLayout>

那么,在View.OnTouchListener(不是View.OnClickListener)对于overlayView,你可以这样做:

@Override
public boolean onTouch(View v, MotionEvent event) {
    mBashfulView.setVisibility(View.GONE);
}

此代码假定您有一个引用 bashful 视图的 mBashfulView 变量。

仅当用户触摸bashful 视图之外的任何位置时才会调用侦听器。

【讨论】:

    【解决方案2】:

    我强烈建议使用dispatchTouchEvent()。这是您的活动可以覆盖的功能(具有签名public boolean dispatchTouchEvent(MotionEvent ev)),它将拦截屏幕上的所有触摸事件。在此函数中,您将能够决定如何处理触摸事件。如果您确定不想做任何特别的事情,并且应该允许用户的触摸正常进行,请致电super.dispatchTouchEvent(ev)

    一些文档: http://developer.android.com/reference/android/app/Activity.html#dispatchTouchEvent(android.view.MotionEvent)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多