Tôi cần tìm hiểu xem có bất kỳ chế độ xem nào được tập trung bên trong Hoạt động hay không và chế độ xem đó là gì. làm như thế nào?
Tôi cần tìm hiểu xem có bất kỳ chế độ xem nào được tập trung bên trong Hoạt động hay không và chế độ xem đó là gì. làm như thế nào?
Câu trả lời:
Kêu gọi getCurrentFocus()Hoạt động.
getCurrentFocus(), nhưng không đáng tin cậy như vậy.
activity?.currentFocus
Từ nguồn Hoạt động:
/**
* 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;
}
vì một số lý do mà phương thức getCurrentFocus () không còn khả dụng nữa; có lẽ nó đã không còn được dùng nữa, đây là giải pháp thay thế hoạt động:
View focusedView = (View) yourParentView.getFocusedChild();
getFocusedChild()là một phương thức trên ViewGroup.
Thay vào đó, hãy thử điều này, đặt mọi thứ bên trong a threadvà in trực tiếp id và tên lớp vào logcat. Chỉ cần đặt mã này bên trong của bạn Activity, trong onCreatephương thức, sau đó xem xét của bạn logcatđể xem những gì hiện đang được tập trung.
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();
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()
Lưu ý rằng luồng này chạy trong chu kỳ 100ms để nó không làm tràn CPU với các công việc không cần thiết.
nếu bạn đang ở trong một mảnh, bạn có thể sử dụng
getView().findFocus()