如何找出重点关注的视图?

时间:2011-03-18 12:51:01

标签: android

我需要找出是否有任何视图集中在一个Activity中,以及它是什么视图。怎么做?

6 个答案:

答案 0 :(得分:94)

在活动上致电getCurrentFocus()

答案 1 :(得分:11)

来自活动来源:

   /**
     * Calls {@link android.view.Window#getCurrentFocus} on the
     * Window of this Activity to return the currently focused view.
     * 
     * @return View The current View with focus or null.
     * 
     * @see #getWindow
     * @see android.view.Window#getCurrentFocus
     */
    public View getCurrentFocus() {
        return mWindow != null ? mWindow.getCurrentFocus() : null;
    }

答案 2 :(得分:5)

由于某种原因,getCurrentFocus()方法不再可用;可能它已经被弃用了,这里是工作替代方案:

View focusedView = (View) yourParentView.getFocusedChild();

答案 3 :(得分:2)

只需将其放在Activity方法内的onCreate内,然后查看logcat即可查看当前的重点。

  new Thread(() -> {
        int oldId = -1;
        while (true) {
            View view = this.getCurrentFocus();
            if (view != null && view.getId() != oldId) {
                oldId = view.getId();
                String idName = "";
                try {
                   idName = getResources().getResourceEntryName(newView.getId());
                 } catch (Resources.NotFoundException e) {
                   idName = String.valueOf(newView.getId());
                 }
                Log.i(TAG, "Focused Id: " + idName + " Class: " + view.getClass());
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();

请注意,此线程以100ms为周期运行,因此不会因不必要的工作而使CPU溢出。

答案 4 :(得分:1)

ViewGroup有一个非常方便的方法来检索关注的孩子:

ViewGroup.getFocusedChild()

答案 5 :(得分:0)

如果您在片段中,则可以使用

getView().findFocus()