/**
* 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;
}
Coba ini sebagai gantinya, meletakkan segala sesuatu di dalam threaddan mencetak id dan classname hidup untuk logcat. Letakkan saja kode ini di dalam Anda Activity, dalam onCreatemetode, lalu lihat Anda logcatuntuk melihat apa yang saat ini difokuskan.
Anda dapat memperpanjang kode ini dan menambahkan sorotan sehingga Anda dapat melihat item mana yang dipilih. Ini harus berfungsi selama item ada di dalam layar. Tetapi menggunakan logcatjauh lebih aman.
Haroun Hajem
6
untuk beberapa alasan metode getCurrentFocus () tidak tersedia lagi; mungkin sudah usang, berikut cara kerjanya:
getCurrentFocus()
, tetapi tidak dapat diandalkan.activity?.currentFocus
Dari sumber Kegiatan:
/** * 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; }
sumber
Coba ini sebagai gantinya, meletakkan segala sesuatu di dalam
thread
dan mencetak id dan classname hidup untuklogcat
. Letakkan saja kode ini di dalam AndaActivity
, dalamonCreate
metode, lalu lihat Andalogcat
untuk melihat apa yang saat ini difokuskan.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()
Ketahuilah bahwa utas ini berjalan dalam siklus 100 md sehingga tidak membanjiri CPU dengan pekerjaan yang tidak perlu.
sumber
logcat
jauh lebih aman.untuk beberapa alasan metode getCurrentFocus () tidak tersedia lagi; mungkin sudah usang, berikut cara kerjanya:
View focusedView = (View) yourParentView.getFocusedChild();
sumber
getFocusedChild()
adalah metode aktifViewGroup
.jika Anda berada dalam sebuah fragmen, Anda dapat menggunakan
getView().findFocus()
sumber
ViewGroup memiliki metode yang cukup nyaman untuk mengambil anak yang difokuskan:
ViewGroup.getFocusedChild()
sumber