如何在XML中实现OnTouch侦听器

时间:2015-12-17 04:49:58

标签: android onclicklistener android-xml ontouchlistener

据我所知,我们可以在xml中编写后在xml中定义onClick标记,我们可以通过xml中指定的名称轻松地在java代码中使用,例如

<Button android:id="@+id/mybutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"
    android:onClick="myClick" />

public void myClick(View v) {
    // does something very
}

1)是否可以在XML中定义onTouch,如果是,那么如何使用???

2)或在onTouch听众中实施onClick听众的任何其他方式;

这里我的目标是交互超过100个按钮而不定义按钮名称如下所述:并且还具有onTouch功能......

    Button mbutton;
    mbutton = (Button)findViewbyId(R.id.button);

由于

3 个答案:

答案 0 :(得分:4)

  

1)是否有任何方法可以在XML中定义onTouch,如果是,那么如何使用???

,android没有提供默认属性,允许您在xml文件中定义触摸事件,您必须在.java文件中编写该方法。

  

2)或在onClick侦听器中实现onTouch Listener的任何其他方式;

,您无法在onTouch()内实施onClick(),因为当您触摸或说第一次点击或点按屏幕时会调用onClick事件并在执行时执行事件你释放触摸。但它无法检测到您的触摸移动,即ACTION_DOWNACTION_UP等。

因此,如果您想要实施onTouch()事件,您可以自己编写。

您可以编写一些可以让您轻松实现onTouch()事件的机制。但我没有这样做,建议您使用Butterknife库,只需定义onTouch()即可轻松编写annotation方法。 Here's the code他们如何在注释中绑定onTouch()(如果你想编写自己的机制)。

答案 1 :(得分:1)

Hope this helps some one

You can easily do it using databinding:

step1

public class DataBidingAdapter{

 @SuppressLint("ClickableViewAccessibility")
    @BindingAdapter("touchme")
    public static void setViewOnTouch(TextView view, View.OnTouchListener listener) {
       view.setOnTouchListener(listener);
    }
}

step 2 in xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>       
        <variable
            name="handlers"
            type="com.user.handlers.Handlers" />

    </data>

    <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">  
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="16dp"
          >

            <EditText
                android:id="@+id/search"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/search_for_chats_title"
                app:touchme="@{handlers.searchPatient}" />
        </FrameLayout>
</linearLayout>
</layout>
step 3
 public class Handler{
 public boolean searchPatient(View v, MotionEvent event) {
        if (MotionEvent.ACTION_UP == event.getAction()) {
          //your code
        }
        return true;
    }
}

答案 2 :(得分:0)

据我所知,您无法将代码直接放入XML中。如果我错了,请纠正我。您必须在活动类中包含代码。