Herhangi bir görünümün bir Aktivite içinde odaklanıp odaklanmadığını ve hangi görünüm olduğunu öğrenmem gerekiyor. Bu nasıl yapılır?
Herhangi bir görünümün bir Aktivite içinde odaklanıp odaklanmadığını ve hangi görünüm olduğunu öğrenmem gerekiyor. Bu nasıl yapılır?
Yanıtlar:
getCurrentFocus()Aktiviteyi arayın .
getCurrentFocus(), ancak o kadar güvenilir değildir.
activity?.currentFocus
Faaliyetin kaynağından:
/**
* 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;
}
Bunun yerine bunu deneyin, her şeyi a içine koyun threadve id ve sınıf adını canlı olarak yazdırın logcat. Sadece bu kodu yönteminizin içine koyun Activity, onCreateardından logcatşu anda neyin odaklandığını görmek için kendi yönteminize bakın.
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()
Bu iş parçacığının 100 ms'lik bir döngüde çalıştığının farkında olun, böylece gereksiz çalışmayla CPU'yu aşmaz.
logcatçok daha güvenlidir.
bazı nedenlerden dolayı getCurrentFocus () yöntemi artık kullanılamıyor; muhtemelen kullanımdan kaldırılmıştır, işte çalışma alternatifi:
View focusedView = (View) yourParentView.getFocusedChild();
getFocusedChild()bir yöntemdir ViewGroup.
eğer bir parçadaysan kullanabilirsin
getView().findFocus()