/**
* 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;
}
Это два разных метода. getCurrentFocus () - это метод класса Activity, а getFocusedChild () принадлежит классу View
BoredT
2
@BoredT: getFocusedChild()это метод на ViewGroup.
gnuf
6
Попробуйте вместо этого, поместите все в a threadи распечатайте идентификатор и имя класса live для logcat. Просто поместите этот код внутри вашего Activity, в onCreateметоде затем посмотреть на ваш , logcatчтобы узнать , что в настоящее время сосредоточены.
Вы можете расширить этот код и добавить выделение, чтобы видеть, какой элемент выбран. Он должен работать, пока элемент находится внутри экрана. Но использование logcatгораздо безопаснее.
Харун Хаджем
2
если вы находитесь во фрагменте, вы можете использовать
getCurrentFocus()
, но не так надежно.activity?.currentFocus
Из источника активности:
/** * 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; }
источник
по какой-то причине метод getCurrentFocus () больше не доступен; вероятно, он уже устарел, вот рабочая альтернатива:
View focusedView = (View) yourParentView.getFocusedChild();
источник
getFocusedChild()
это метод наViewGroup
.Попробуйте вместо этого, поместите все в a
thread
и распечатайте идентификатор и имя класса live дляlogcat
. Просто поместите этот код внутри вашегоActivity
, вonCreate
методе затем посмотреть на ваш ,logcat
чтобы узнать , что в настоящее время сосредоточены.ЯВА
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();
КОТЛИН
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()
Имейте в виду, что этот поток выполняется в цикле 100 мс, поэтому он не перегружает ЦП ненужной работой.
источник
logcat
гораздо безопаснее.если вы находитесь во фрагменте, вы можете использовать
getView().findFocus()
источник
ViewGroup имеет довольно удобный метод для получения сфокусированного дочернего элемента:
ViewGroup.getFocusedChild()
источник