一个非常直截了当的问题:我有一个片段,如果满足某个条件,我希望它计算屏幕上的点击次数。
所以我做了一个
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count_tap++;
}
});
这似乎几乎可行,但在我看来的某些项目中,没有观察到组件。我是否必须为所有组件(即使是那些通常是静态xml的组件)提供id和id,并使用相同的setOnClickListener
设置它们?
或者这样做是否是错误的方式?
答案 0 :(得分:2)
如果您需要活动或片段的根视图,请使用findViewById(android.R.id.content)
。
像:
View rootView= getActivity().findViewById(android.R.id.content));
将View.OnClickListener
设置为此视图:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count_tap++;
}
});
答案 1 :(得分:1)
您可以打包片段的根视图并计算触摸屏。
public class TouchCounter extends FrameLayout {
private int touchCount;
public TouchableOverlay(Context context) {
super(context);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP: {
touchCount++;
break;
}
}
return super.dispatchTouchEvent(ev);
}
public int getTouchCount() {
return touchCount;
}
}
在你的片段中:
.....
private TouchCounter touchCounter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
return addTouchCounter(view);
}
.....
private void addTouchCounter(View view) {
touchCounter = new TouchCounter(getContext());
touchCounter.addView(view);
return touchCounter;
}
如果您只想计算点击次数,还可以为ACTION_DOWN添加案例并计算ACTION_DOWN和ACTION_UP / CANCEL之间的时差。
答案 2 :(得分:0)
如果您的布局中没有任何按钮或其他触摸手势,这是另一个可能有效的想法,但我想有更优雅的方法来做到这一点。
您可以使用另一个透明View
覆盖您的布局,并使用此透明View
来计算点击次数。
这样的事情:
<FrameLayout
android:id="@+id/view_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
/// instead of this LinearLayout you can put your layout
</LinearLayout>
<View
android:id="@+id/click_counter_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:background="@android:color/transparent"/>
</FrameLayout>
而不是你的布局,你应该膨胀view_frame
,并在click_counter_layout
上设置一个点击监听器。希望它能奏效......