Yakın çevrem benim hep bir oyun tutorialı hazırlamak isteğinde olduğumu bilir. Bu gün itibariyle yavaş yavaş tutorialımı PhoneGap, HTML5 canvası ve azıcık Java kullanarak Android telefonlar için yazmaktayım. Geri kalan bilgiyi bir kaç gün içinde tutorial ile anlatacağım. Oyunu yazarken dokunmatiği daha sonra anlatacağım nedenlerden dolayı disable ve enable etmeliydim. onCreate içinde bunu yapmak oldukça basit.
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
Şeklinde kullandığınızda touch screen iptal olacaktır. Fakat bunu daha sonradan istediğiniz zaman yapmaya kalktığınızda büyük ihtimalle “Only the original thread that created a view hierarchy can touch its views” hatası ile karşılaşacaksınız. Hatadanda anlayacağınız gibi yapılmak istenen şeyin UI ile alakalı olduğunu ve şu an aktif thread’in UI thread olmadığını anlatıyor. Fakat Activicy Class’ının runOnUiThread adında bir metodu var.
Metot için Android dökümanlarında şöyle diyor;
Since: API Level 1
Runs the specified action on the UI thread. If the current thread is the UI thread, then the action is executed immediately. If the current thread is not the UI thread, the action is posted to the event queue of the UI thread.
Parameters
action the action to run on the UI thread
Kısacası yapılacak işlemi UI Thread sırası gelince yapar diyor. Açıkcası bunu bulmak bana yaklaşık 1 saatime mal oldu ama sonunda bulmanın haklı gururunu yaşıyorum.
Activicy içinde bu şekilde kullanmanız yeterli olacaktır.
runOnUiThread(new Runnable() {
@Override
public void run() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
});