我正在开发一个新的应用程序,我很怀疑它是否可能? 我怀疑是
我们必须为整个应用程序设置一次监听器。我们必须为我们的应用程序中发生的任何触摸事件运行一组代码。 例如。我们的应用中可能有n个活动。但是我们必须为所有活动设置一次监听器,并在任何n个活动中发生任何触摸时运行设置代码。我已经尝试了很多。欢迎任何想法。提前谢谢。
答案 0 :(得分:3)
我希望我理解你。
你可以做的是创建一个扩展Activity的类,让我们说TouchActivity。 您的每个活动都将继承TouchActivity。
public class TouchActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
Log.d("Touch", "Touch");
sendBroadcast(new Intent("touch_event_has_occured"));
}
return super.onTouchEvent(event);
}
}
现在在您的全球广播接收器中,您将获得brodcast
public class TouchReveiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals("touch_event_has_occured"))
{
Log.d("Touch", "Touch");
}
}
}
不要忘记用动作注册接收器
答案 1 :(得分:2)
您可以创建一个不可见的自定义视图,占用所有屏幕并使用onTouchEvent来执行您需要执行的任何操作。
然后你需要让每个布局文件都在顶部包含该视图(可能在FrameLayout中)。
答案 2 :(得分:0)
您可以做的是,创建一个基本活动类,该类由应用程序中的所有其他活动扩展。然后,您可以覆盖此基本活动中的public boolean dispatchTouchEvent (MotionEvent ev)
方法。这个被覆盖的实现将是所有触摸事件落地的单一地方。
但有一个重要的警告,它只会在你的所有活动属于同一类型的情况下起作用(例如 - 所有活动都是Activitiy
类型或所有类型都是ListActivity
类型)
答案 3 :(得分:0)
完全可能。
创建名为MyTouchActivity
(或其他内容)的活动覆盖onTouch
事件并编写您正在谈论的set
代码。
现在,n
活动的所有其余活动应该扩展MyTouchActivity
而不是常规活动。这样代码就会继承到所有n个活动。您需要创建单独的MyTouchListActivity
(对于ListActivity)和MyTouchMapActivity(对于MapActivity)
另一种方法是简单地创建一个Ontouch LIstener,然后覆盖每个活动中的每个onTocuh
事件,首先调用你的Listener。但这很麻烦。
答案 4 :(得分:0)
如果您想在整个应用程序中使用它,则需要创建从ActionBarActivity(或SherlockActivity)扩展的类
public class MyCustomActivity extends ActionBarActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout decorView = (FrameLayout) getActivity().getWindow().getDecorView();
decorView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.d(TAG, "Click X:" + event.getX() + " Y:" + event.getY());
return false;
}
});
}
}
然后从MyCustomActivity扩展所有其他活动:
public class MainActivity extends MyCustomActivity{ }
所有触摸事件都将通过TouchListener事件
答案 5 :(得分:0)
使用<select class="custom-select">
<option selected="">Open this select menu</option>
<option value="1">Banana</option>
<option value="2">Watermelon</option>
<option value="3">Mango</option>
</select>
或dispatchTouchEvent
方法的解决方案不适用于整个应用程序。因为有不同类型的窗户。例如,如果弹出一个片段或用户单击一个菜单,这些解决方案将无法捕获触摸事件,因为在这种情况下,其他情况仍在发生。
长话短说,我正在为我的高级项目处理这个问题,所以我开发了一个库,该库可以收集应用程序的所有触摸事件。该库取决于棘手的方式,但它也可以工作。该库是开源的。您可以根据需要进行检查:https://github.com/fatih-iver/touchy
只需将其添加为依赖项:
onTouch
然后,通过注册您的接收器来使用它:
implementation 'fun.observe:touchy:1.0.0'