Saya perlu mencari tahu apakah ada tampilan yang difokuskan di dalam Aktivitas dan tampilan apa itu. Bagaimana cara melakukannya?
Jawaban:
Panggil getCurrentFocus()Aktivitas.
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;
}
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.
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()
Ketahuilah bahwa utas ini berjalan dalam siklus 100 md sehingga tidak membanjiri CPU dengan pekerjaan yang tidak perlu.
logcatjauh lebih aman.
untuk beberapa alasan metode getCurrentFocus () tidak tersedia lagi; mungkin sudah usang, berikut cara kerjanya:
View focusedView = (View) yourParentView.getFocusedChild();
getFocusedChild()adalah metode aktif ViewGroup.
jika Anda berada dalam sebuah fragmen, Anda dapat menggunakan
getView().findFocus()