据我所知,我们可以在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);
由于
答案 0 :(得分:4)
1)是否有任何方法可以在XML中定义onTouch,如果是,那么如何使用???
否,android没有提供默认属性,允许您在xml
文件中定义触摸事件,您必须在.java文件中编写该方法。
2)或在onClick侦听器中实现onTouch Listener的任何其他方式;
否,您无法在onTouch()
内实施onClick()
,因为当您触摸或说第一次点击或点按屏幕时会调用onClick事件并在执行时执行事件你释放触摸。但它无法检测到您的触摸移动,即ACTION_DOWN
,ACTION_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中。如果我错了,请纠正我。您必须在活动类中包含代码。