如果选择了屏幕,则更新小部件

时间:2013-05-07 11:49:05

标签: android widget

我尝试使用以下行为构建窗口小部件:仅在显示窗口小部件时才更新。 让我再解释一下它。假设智能手机可能有3个主屏幕,一个,两个和三个。小部件将放置在屏幕3上,如果您激活智能手机,它将在屏幕1上启动。因此,如果用户将屏幕更改为屏幕3,我只想更新小部件,我想对此事件做出反应。 android有没有机会这样做?

据我所知,遗憾的是没有办法做到这一点,因此无法了解可见性变化或类似情况。我在Google上找了好几个小时但没有找到任何有趣的东西。有人有其他信息吗?我很高兴任何暗示;希望你能帮助我。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用dispatchTouchEvent(希望您可以获取要检查的视图的x,y坐标。)

步骤:

  1. 让containerView成为包含您视图的视图。
  2. 为您的视图设置ontouchlistener。
  3. 当屏幕发生变化时或者您需要检查视图是否可见时,请使用包含视图坐标的MotionEvent启动dispatchTouchEvent调用。
  4. 如果您的视图位于该坐标区域,则会调用视图的触摸事件。
  5. 例如:

        containerView = LayoutInflater.from(this).inflate(
                R.layout.activity_main, null);
        setContentView(containerView);
                yourView = containerView.findViewById(R.id.yourView);
                yourView .setOnTouchListener(new OnTouchListener() {
    
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Toast.makeText(MainActivity.this, "View visible",
                        Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    

    如果需要检查,请执行以下代码:

    public void doCheck() {
        long downTime = SystemClock.uptimeMillis();
        long eventTime = SystemClock.uptimeMillis() + 100;
        float x = 100f; //yourView x coordinate
        float y = 100f; //yourView y coordinate
        int metaState = 0;
        MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime,
                MotionEvent.ACTION_DOWN, x, y, metaState);
        containerView.dispatchTouchEvent(motionEvent);
    }
    
    希望这会有所帮助。