/**
* 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;
}
São dois métodos diferentes. getCurrentFocus () é um método da classe Activity e getFocusedChild () pertence à classe View
BoredT
2
@BoredT: getFocusedChild()é um método ativado ViewGroup.
gnuf
5
Tente fazer isso, coloque tudo dentro de um threade imprima o id e o nome da classe ao vivo logcat. Basta colocar este código dentro do seu Activity, no onCreatemétodo e depois olhar para o seu logcatpara ver o que está focado no momento.
getCurrentFocus()
, mas não tão confiável.activity?.currentFocus
Da fonte de atividade:
/** * 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; }
fonte
por algum motivo, o método getCurrentFocus () não está mais disponível; provavelmente já está obsoleto, aqui está a alternativa de trabalho:
View focusedView = (View) yourParentView.getFocusedChild();
fonte
getFocusedChild()
é um método ativadoViewGroup
.Tente fazer isso, coloque tudo dentro de um
thread
e imprima o id e o nome da classe ao vivologcat
. Basta colocar este código dentro do seuActivity
, noonCreate
método e depois olhar para o seulogcat
para ver o que está focado no momento.JAVA
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: " + idName + " Class: " + 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: " + idName + " Class: " + newView.javaClass) } try { Thread.sleep(100) } catch (e: InterruptedException) { e.printStackTrace() } } }).start()
Esteja ciente de que este thread é executado em um ciclo de 100ms para não sobrecarregar a CPU com trabalho desnecessário.
fonte
se você estiver em um fragmento, você pode usar
getView().findFocus()
fonte
ViewGroup tem um método bastante conveniente para recuperar o filho em foco:
ViewGroup.getFocusedChild()
fonte