TouchListener用于frameLaout

时间:2015-07-06 12:04:44

标签: android ontouchlistener android-framelayout

我有一个包含几个视图的FrameLayout。我想将TouchListener设置为frameLayout,布局是在代码中创建的:

FrameLayout textLayout = new FrameLayout(getActivity());
            textLayout.setOnTouchListener(this);
            FrameLayout.LayoutParams textLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            textLayout.setLayoutParams(textLayoutParams);
            container.addView(textLayout);

我将它命名为touchListener,但它不会输入它。

@Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.d("tag","touch");
        return true;
    }

更新:
我想我发现了部分问题:我将frameLayout的背景设置为绿色并扩展了framelayout的空间,以便它不会仅覆盖其视图,而是更多。所以我看到了我的观点,并在他们身边看到了绿色。当我触摸绿色时,onTouch事件会激活,但不会触及视图。

1 个答案:

答案 0 :(得分:1)

您似乎正在使用您的片段作为监听器。请确保它实现和覆盖,即

public final MyFragment implements View.OnTouchListener {
    ....
}

然后确保您没有在活动或其他片段/视图中使用触摸侦听器返回true,即触摸事件已消耗且不会向前发送。

注意即使框架布局容器中有视图,也要正确调度事件,您可以将它们设置为不可点击,即

<FrameLayout
    android:id="@+id/frameLayout"
    android:clickable="true"
    ...>
    <TextView android:id="@+id/text" android:clickable="false" .../>
    <... android:clickable="false" .../>
</FrameLayout>

如果需要,您也可以在代码中禁用所有视图作为可点击对象:

  

text.setClickable(假);