我需要找出是否有任何视图集中在一个Activity中,以及它是什么视图。怎么做?
答案 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()