/**
* 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;
}
Ce sont deux méthodes différentes. getCurrentFocus () est une méthode de classe Activity et getFocusedChild () appartient à la classe View
BoredT
2
@BoredT: getFocusedChild()est une méthode sur ViewGroup.
gnuf
5
Essayez plutôt ceci, mettez tout dans un threadet affichez l' ID et le nom de la classe en direct logcat. Mettez simplement ce code dans votre Activity, dans la onCreateméthode, puis regardez dans votre logcatpour voir ce qui est actuellement ciblé.
getCurrentFocus()
, mais pas si fiable.activity?.currentFocus
De la source de l'activité:
/** * 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; }
la source
pour une raison quelconque, la méthode getCurrentFocus () n'est plus disponible; probablement déjà obsolète, voici l'alternative de travail:
View focusedView = (View) yourParentView.getFocusedChild();
la source
getFocusedChild()
est une méthode surViewGroup
.Essayez plutôt ceci, mettez tout dans un
thread
et affichez l' ID et le nom de la classe en directlogcat
. Mettez simplement ce code dans votreActivity
, dans laonCreate
méthode, puis regardez dans votrelogcat
pour voir ce qui est actuellement ciblé.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()
Sachez que ce thread s'exécute dans un cycle de 100 ms afin qu'il ne déborde pas le processeur avec un travail inutile.
la source
si vous êtes dans un fragment, vous pouvez utiliser
getView().findFocus()
la source
ViewGroup a une méthode assez pratique pour récupérer un enfant focalisé:
ViewGroup.getFocusedChild()
la source