0

TextView在 Android 2.3.3 上处理 Touch 事件时遇到问题。我有OnTouchListener带有方法的 Activity 实现

main.java

 public boolean onTouchEvent(MotionEvent event) {
        if(event.getPointerCount()==1){
  textView.setTextSize(mRatio+13);
        mRatio++;        
        Log.d("TouchEvent", "one touch !");
        }
  if (event.getPointerCount() == 2) {
some code...
  }
  return true; 
 }

和我的布局(只是其中的一部分):

   <LinearLayout android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:orientation="vertical"
                  android:layout_weight="1.0"
                  android:fadingEdge="none"
                  android:background="@color/white">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" 
            android:layout_margin="10dp">

            <!-- TEXT EMAIL : -->
            <TextView
                android:id="@+id/mail_text"
                android:layout_height="wrap_content"
                android:layout_width="fill_parent"
                android:textSize="15sp"
                android:autoLink="web"
                android:clickable="true"

                android:textColor="@color/mailtext"
                android:scrollbars = "vertical"/>

        </LinearLayout>

    </LinearLayout>

当我“点击”文本框以外的任何地方(例如页眉或页脚)时,Touch 事件触发,字体变大。我认为问题可能是因为滚动条。但是当我切断android:scrollbars = "vertical"酒吧的时候就消失了。

这个 textView 通常包含很多文本。

如何在此 textView 中正确触发 onTouchEvents。

编辑: 当这个 textView 很小时,我的 touchEvent 工作,直到我得到这么大的文本,而不是需要滚动条。然后所有的触摸事件都会被覆盖,你只能滚动 textView。没有调用 TouchEvent。

4

2 回答 2

1

我以其他方式处理问题。OnTouchEvent 不适用于我的 TextView,因此我重写了 dispatchTouchEvent。执行“onTouch”操作要好得多。滚动条正在工作,我可以在整个屏幕上添加我的多点触控事件。它看起来像:

  @Override
    public boolean dispatchTouchEvent(MotionEvent motionEvent){
          Log.v("NotificationActivity.dispatchTouchEvent()", "got touch");

          if (motionEvent.getPointerCount() == 2) {
    Log.v("touch", "multi touch !");
              int action = motionEvent.getAction();
              int pureaction = action & MotionEvent.ACTION_MASK;
              // some actions ...
          }

        switch (motionEvent.getAction()){
            case MotionEvent.ACTION_DOWN:{
                //Keep track of the starting down-event.
                Log.v("akcjaa","down");
     // some actions ...
                break;
            }
            case MotionEvent.ACTION_UP:{
                //Consume if necessary and perform the fling / swipe action
                //if it has been determined to be a fling / swipe
              Log.v("akcjaa","up");
                break;
            }

        }
        return super.dispatchTouchEvent(motionEvent);
    }
于 2013-10-09T05:30:55.410 回答
0

我假设您的 TextView 在某种 ScrollView 或 Scrollable 容器中,对吗?

那么你将面临这个问题。Android 不喜欢他的苹果和梨混合,您不应该尝试接收视图顶部的父布局正在消耗的“onTouch”事件。

我想你可以:

a) 切换到 TextView 上的 onClickListener

b)覆盖您的父视图布局触摸处理程序以将触摸流血到其子级。这并不是真正 100% 推荐的,并且可能会导致不需要的行为。

抱歉,如果我不能提供更多帮助。

于 2013-10-04T13:44:09.257 回答