/**
* 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;
}
Spróbuj zamiast tego umieścić wszystko wewnątrz threadi wydrukować identyfikator i classname żyć logcat. Po prostu umieść ten kod w swoim Activity, w onCreatemetodzie, a następnie zajrzyj do swojego, logcataby zobaczyć, na czym aktualnie się skupiamy.
Możesz rozszerzyć ten kod i dodać wyróżnienie, aby zobaczyć, który element jest wybrany. Powinien działać tak długo, jak długo element znajduje się wewnątrz ekranu. Ale używanie logcatjest znacznie bezpieczniejsze.
Haroun Hajem
6
z jakiegoś powodu metoda getCurrentFocus () nie jest już dostępna; prawdopodobnie jest już przestarzały, tutaj działająca alternatywa:
getCurrentFocus()
, ale nie jest to niezawodne.activity?.currentFocus
Ze źródła działania:
/** * 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; }
źródło
Spróbuj zamiast tego umieścić wszystko wewnątrz
thread
i wydrukować identyfikator i classname żyćlogcat
. Po prostu umieść ten kod w swoimActivity
, wonCreate
metodzie, a następnie zajrzyj do swojego,logcat
aby zobaczyć, na czym aktualnie się skupiamy.JAWA
new Thread(() -> { int oldId = -1; while (true) { View newView= this.getCurrentFocus(); if (newView != null && newView.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: \t" + idName + "\tClass: \t" + newView.getClass()); } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } }).start();
KOTLIN
Thread(Runnable { var oldId = -1 while (true) { val newView: View? = this.currentFocus if (newView != null && newView.id != oldId) { oldId = newView.id var idName: String = try { resources.getResourceEntryName(newView.id) } catch (e: Resources.NotFoundException) { newView.id.toString() } Log.i(TAG, "Focused Id: \t" + idName + "\tClass: \t" + newView.javaClass) } try { Thread.sleep(100) } catch (e: InterruptedException) { e.printStackTrace() } } }).start()
Należy pamiętać, że ten wątek działa w cyklu 100 ms, więc nie przepełnia procesora niepotrzebną pracą.
źródło
logcat
jest znacznie bezpieczniejsze.z jakiegoś powodu metoda getCurrentFocus () nie jest już dostępna; prawdopodobnie jest już przestarzały, tutaj działająca alternatywa:
View focusedView = (View) yourParentView.getFocusedChild();
źródło
getFocusedChild()
to metoda naViewGroup
.jeśli jesteś w fragmencie, którego możesz użyć
getView().findFocus()
źródło
ViewGroup ma dość wygodną metodę odzyskiwania skoncentrowanego dziecka:
ViewGroup.getFocusedChild()
źródło