【发布时间】:2015-09-06 17:03:09
【问题描述】:
我正在尝试向上/向下滑动手势。问题不在于如何实现向上/向下滑动捕捉。我无法接听 onTouch 电话。 在 Fragment 布局内部,有一个 LinearLayout 已为其设置了 onTouchListener。但不知何故,它不起作用 - 无法获得 onTouch 呼叫。
这就是LinearLayout:
<LinearLayout
android:id="@+id/llContent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_back"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent" />
<Button
android:id="@+id/btn_forward"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent" />
</LinearLayout>
在 Fragment 的 onCreateView 中,我将 onTouchListener 设置为该 LinearLayout:
LinearLayout llContent = (LinearLayout) view.findViewById(R.id.llContent);
llContent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
new MyLog("Touch");
return true;
}
});
我想,这是因为子按钮和 clickListeners。所以我禁用了它们:
// view.findViewById(R.id.btn_back).setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// mCurrentIndex = (mCurrentIndex > 0) ? mCurrentIndex - 1 : 0;
// update();
// }
// });
// view.findViewById(R.id.btn_forward).setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// mCurrentIndex = (mCurrentIndex < mPagination.size() - 1) ? mCurrentIndex + 1 : mPagination.size() - 1;
// update();
// }
// });
在 StackOverflow 上,有很多关于此的问题并且有解决方案。
尝试 1: 这个answer 说我应该从onTouch 方法返回true。我的 onTouch 方法已经返回 true。
@Override
public boolean onTouch(View v, MotionEvent event) {
new MyLog("Touch");
return true;
}
尝试 2: 这个答案说我应该重写 onTouchListener 的 onTouchEvent 方法。但是当我实现 onTouchListener 接口时,我无法覆盖 onTouchEvent。 Android Studio 的智能感知找不到。当我手动编写它时,Android Studio 将 onTouchEvent 方法显示为错误。 错误:方法没有覆盖其超类中的方法。同样的答案也是here。
问题:如何获取子LinearLayout的onTouch调用?
这是整个片段布局的 XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FEFFFF">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="41dp"
android:background="#EFF0F1"
android:scrollbars="none">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="57dp"
android:paddingRight="57dp">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#2E2F30"
android:textSize="17sp" />
<TextView
android:id="@+id/tvAuthor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:textColor="#5E5F60"
android:textSize="17dp" />
</LinearLayout>
</HorizontalScrollView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="8dp"
android:paddingLeft="25dp"
android:paddingRight="25dp"
android:paddingTop="8dp">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textColor="#1C1D1D"
android:textSize="18sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#050505" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tvPercent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:textSize="15sp" />
<TextView
android:id="@+id/tvProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#444546"
android:textSize="15sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/llContent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_back"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent" />
<Button
android:id="@+id/btn_forward"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
【问题讨论】:
-
你能解决这个问题吗?我有类似的问题,但在我的情况下,应用程序在通过按钮启动时没有检测到任何手势。
-
Try this answer希望这有帮助
-
Try this answer希望这有帮助!
标签: java android android-layout ontouchlistener