tag:blogger.com,1999:blog-72236719960237687002024-03-05T11:12:56.528-08:00Android ProgrammingAnonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-7223671996023768700.post-38662905788283903122013-07-17T05:54:00.000-07:002013-07-18T05:20:14.488-07:00Recreating an Activity - Bir Activity'yi Yeniden oluşturmaKullanıcının geri tuşuna basması veya activity'nin <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">finish()</span> metodunu çağırması ile kendi kendini sonlandırması gibi bir activity'nin yok edilmesi ile ilgili birkaç senaryo vardır. Aynı zamanda activity sistemin uzun süre kullanılmamasından ve bellek gibi sistem kaynaklarının serbest bırakılmasını sağlamak için veya sistemin durdurulmuş olmasından da yok edilebilir.<br />
<a name='more'></a>Activity kullanıcının geri butonuna basması sonucu activity'nin kendini bitirmesi ile yokedildiğinde, sistemin bu durumdan anladığı bu activity'ye artık ihtiyaç olmadığı ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Activity</span>'ye ait instansın ebediyen ortadan kaldırılacağıdır. Ancak, sistem sınırlaması yüzünden eğer activity sistem tarafından yok edilirse (normal uygulama davranışından daha fazlası), daha sonra asıl Activity instansının gitmiş olmasına rağmen, sistem tekrardan geri tuşuna basıldığında varolan durumu hatırlar, sistem activity'nin yokedildiği durumda kaydedilmiş verileri kullanarak yeni bir Activity instansı oluşturur. Önceki duruma dönmek için depolanmış veri "instans durumu (instance state)" olarak adlandırılır ve key-value çiftlerini tutan bir <span style="font-family: Courier New, Courier, monospace;"><span style="color: #3d85c6;">Bundle</span> </span>nesnesinden oluşur.<br />
<br />
<b>Dikkat</b>: Kullanıcı ekranın yönünü her değiştirdiğinde Activity yok edilip yeniden oluşturulur. Ekran yönünü değiştirdiğinde, sistem öndeki activity'yi yok eder, çünkü ekran konfigürasyonu değişmiştir ve activity alternatif kaynakları yüklemelidir (layout gibi).<br />
<br />
Varsayılan olarak, sistem activity layout'undaki her View nesnesi hakkındaki bilgileri kaydetmek için <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Bundle </span>instans durumunu kullanır.(Bir EditText nesnesine girilmiş bir metin gibi). Böylece eğer activity'niz yokedilir ve tekrar oluşturulursa herhangi bir kod eklemeden önceki durumuna getirilebilir. Ancak, activity geri getirilmesini istediğiniz kullanıcının activity içindeki işlemlerini izleyen üye bilgisi gibi daha fazla durum bilgisine sahip olabilir.<br />
<br />
<b>Not:</b> Android sistemin activity'deki view'leri geri getirebilmesi için, her view'in benzersiz bir id'ye sahip olması gereklidir. Bu <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">android:id</span> özelliği ile sağlanır.<br />
<br />
Activity durumu ile ilgili ek veri kaydetmek için, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onSaveInstanceState()</span> callback metodunu yeniden yazmalısınız (yani override etmelisiniz). Sistem bu metodu kullanıcı activity'yi terk ettiğinde çağırır ve activity beklenmedik şekilde yokedildiği durumda kaydedilen <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Bundle</span> nesnesine geçer. Eğer activity instansını daha sonra yeniden oluşturmak isterseniz, sistem Bundle nesnesini hem <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onRestoreInstanceState()</span> metoduna hem de <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> metoduna birlikte geçer.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOaDzF8J6KH0bKfKLwWnUI6WReD14Wkq3AQyObvnJiFVNaXsOzNwinGQUxodGUriLKJn0kTfJu_fdwG23YrfGXjwFalb2y56EICmYrJPmLnhyw8w4u2yHPZL1NbcZzkxlbJ14g67BNID4/s1600/basic-lifecycle-savestate.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOaDzF8J6KH0bKfKLwWnUI6WReD14Wkq3AQyObvnJiFVNaXsOzNwinGQUxodGUriLKJn0kTfJu_fdwG23YrfGXjwFalb2y56EICmYrJPmLnhyw8w4u2yHPZL1NbcZzkxlbJ14g67BNID4/s1600/basic-lifecycle-savestate.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: left;"><b>Resim 2.</b> Sistem activity'yi durdurmaya başladığı sırada, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onSaveInstandeState()</span> metodunu çağırır, böylece Activity'nin tekrar oluşrurulması sırasında kaydedilmesi istenilen ek durum verileri belirlenebilir. Eğer activity yokedilmişse ve aynı instansın yeniden oluşturulması gerekiyorsa, sistem (1) de belirlenen veri durumunu hem <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate() </span>metoduna (2) hemde <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onRestoreInstanceState()</span> metoduna(3) geçer.</td></tr>
</tbody></table>
<h3>
Save Your Activity State - Activity Durumunu Kaydetme</h3>
<div>
Activity durmaya başladığında, sistem <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onSaveInstanceState()</span> metodunu çağırır, böylece activity key-value çiftleri ile birlikte durum bilgisini kaydedebilir. Bu metodun varsayılan şekli activity'nin view hiyerarşisi hakkındaki <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">EditText</span> içindeki metin veya <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">LastView</span>'in scroll pozisyonu gibi bilgileri kaydeder. </div>
<br />
Activity için ek durum bilgileri kaydedilmek istendiğinde,<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"> onSaveInstanceState()</span> metodu implement edilmeli ve bir Bundle nesnesine key-value çiftler eklenmeli. Örneğin:<br />
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 1.5; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="kwd" style="color: #000088;">static</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">final</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">String</span><span class="pln" style="color: black;"> STATE_SCORE </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="str" style="color: #008800;">"playerScore"</span><span class="pun" style="color: #666600;">;</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">static</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">final</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">String</span><span class="pln" style="color: black;"> STATE_LEVEL </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="str" style="color: #008800;">"playerLevel"</span><span class="pun" style="color: #666600;">;</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">...</span><span class="pln" style="color: black;">
</span><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onSaveInstanceState</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">Bundle</span><span class="pln" style="color: black;"> savedInstanceState</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Save the user's current game state</span><span class="pln" style="color: black;">
savedInstanceState</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">putInt</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">STATE_SCORE</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> mCurrentScore</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
savedInstanceState</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">putInt</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">STATE_LEVEL</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> mCurrentLevel</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Always call the superclass so it can save the view hierarchy state</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onSaveInstanceState</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">savedInstanceState</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
<div>
<b>Dikkat: </b>Her zaman <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onSaveInstanceState()</span> metodunun superclass implemantasyonunu çağırın, böylece varsayılan implementasyon view hiyerarşi durumunun kaydedebilir.</div>
<h3>
Restore Your Activity State - Activity Durumunu Geri Getirme</h3>
<div>
Daha önceden yokedilmiş bir activity tekrar oluşturulduğunda, Activity sistem tarafından geçen bir <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Bundle</span> nesnesi tarafından yeniden şekillendirilir. <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> ve<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"> onRestoreInstanceState()</span> metodlarının her ikisi de o anki durum bilgisini içeren aynı <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Bundle</span> nesnesini alır. </div>
<div>
<br /></div>
<div>
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> metodu sistemin yeni bir activity'ye ait yeni bir instans mı yoksa önceki bir activity instansını tekrardan oluşturduğu bilinmeden çağrılır. Bundle durumunun onu okumadan önce null olup olmadığı kontrol edilmelidir. Eğer null ise, önceki durumu getirmek yerine sistem activity'nin yeni bir örneğini oluşturmalıdır.</div>
<div>
<br /></div>
<div>
Örneğin, aşağıda bazı durum verilerinin onCreate() metodunda nasıl geri getirileceği görülüyor. </div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 1.5; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">protected</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onCreate</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">Bundle</span><span class="pln" style="color: black;"> savedInstanceState</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onCreate</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">savedInstanceState</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// Always call the superclass first</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Check whether we're recreating a previously destroyed instance</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">if</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">savedInstanceState </span><span class="pun" style="color: #666600;">!=</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">null</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Restore value of members from saved state</span><span class="pln" style="color: black;">
mCurrentScore </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> savedInstanceState</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">getInt</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">STATE_SCORE</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
mCurrentLevel </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> savedInstanceState</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">getInt</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">STATE_LEVEL</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">else</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Probably initialize members with default values for a new instance</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">...</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
</div>
<div>
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> esnasında durumu geri getirmek yerine <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onStart()</span> metodundan sonra sistem tarafından çağrılan <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onRestoreInstanceState()</span> metodunu imlement etme de seçilebilir. Sistem sadece kaydedilmiş bir durumu geriçağırmak için <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onRestoreInstanceState()</span> metodunu çağırır, bu yüzden Bundle'ın null olup olmadığının kontrol edilmesine gerek kalmaz. </div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 1.5; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onRestoreInstanceState</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">Bundle</span><span class="pln" style="color: black;"> savedInstanceState</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Always call the superclass so it can restore the view hierarchy</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onRestoreInstanceState</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">savedInstanceState</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Restore state members from saved instance</span><span class="pln" style="color: black;">
mCurrentScore </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> savedInstanceState</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">getInt</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">STATE_SCORE</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
mCurrentLevel </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> savedInstanceState</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">getInt</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">STATE_LEVEL</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
</div>
<div>
Dikkat: Her zaman <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onRestoreInstanceState()</span> metoduna ait superclass implemantasyonu yapılmalıdır. Böylece varsayılan implemantasyon view hiyerarşisinin durumunu geri getirebilir.</div>
Anonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.com0tag:blogger.com,1999:blog-7223671996023768700.post-14837329654759183792013-07-09T02:03:00.001-07:002013-07-17T05:41:14.682-07:00Stopping and Restarting an Activity - Bir Activity'yi Durdurma ve Yeniden BaşlatmaActivity'yi düzgün olarak durdurup başlatabilmek, activity'nin yaşam döngüsü içinde kullanıcıların uygulamanın canlı olduğunu ve işlemleri sorunsuz bir şekilde yapabileceğıni algılamalarını sağlayan çok önemli bir işlemdir. Aslında uygulamayı durdurup başlatırken gerçekleşen sadece bir kaç senaryo vardır:<br />
<br />
<ul>
<li>Kullanıcı halihazırda kullanılan uygulamalar penceresini açar ve başka bir uygulamadan sizin uygulamanıza geçebilir. Uygulamanızda o anda aktif olan activity durdurulur. Eğer kullanıcı ana ekrandaki uygulamanın simgesine tıklarsa veya tekrardan halihazırda kullanılan uygulamalar (recent apps) penceresinden uygulamanıza tekrar gelirse activity tekrar başlar.</li>
<li>Uygulamada yeni activity başlatan bir action kullanıcı tarafından oluşturulur.İkinci activity oluşturulduğunda o anki activity durdurulur. Eğer kullanıcı geri (back) butonuna basarsa birinci activity tekrar başlar.</li>
<li>Kullanıcı uygulamanızı telefonunda kullanırken bir arama alır.</li>
</ul>
<div>
Activity sınıfı iki tane yaşam döngüsü metodu sağlar. Bunlar onStop() ve onRestart() metodlarıdur. Bu metodlar özellikle activity'nin durduğunda ve geri başladığında neler yapacağını işler.Kısmen kullanıcı arayüzünü tıkayan Pause metodunun aksine, Stop durumu kullanıcı arayüzünün artık görünür olduğunu ve kullanıcı odağının ayrı bir activity'de olduğunu garanti eder.</div>
<div>
<br /></div>
<div>
<b>Not: </b>Sistem Activity durdurulduğunda activity instansını sistem belleğinde bıraktığı için, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onStop()</span> ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onResume()</span> (hatta <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onStart()</span>) metodlarını imlplement etmemeniz mümkün. Nispeten basit olan çoğu activity için activity iyi olarak duracak ve tekrar başlayacaktır. Devam eden uygulamaları duraklatmak için ve sistem kaynaklarından (kamera, hoparlör gibi) kopmak için sadece <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onPause()</span> metoduna ihtiyaç duyulabilir.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinr07q7fyvIc6s6h3hNXdsCbrbvLF5eGDhZCCT-T8nSf738kcWjQ9pHGosTKR6XZEns82yld7d_2A5KIBUVXTFVEqi07xufgOdACjutJsDYmLAkwvDSb8rwjEEXQpL6BTRf0m4HX8gS7Y/s1600/basic-lifecycle-stopped.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinr07q7fyvIc6s6h3hNXdsCbrbvLF5eGDhZCCT-T8nSf738kcWjQ9pHGosTKR6XZEns82yld7d_2A5KIBUVXTFVEqi07xufgOdACjutJsDYmLAkwvDSb8rwjEEXQpL6BTRf0m4HX8gS7Y/s400/basic-lifecycle-stopped.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: justify;">Şekil 1 - Kullanıcı activity'yi terk ettiğinde, sistem activity'yi durdurmak için onStop() <b>1</b> metodunu çağırır. Activity durdurulduğunda kullanıcı activity'ye geri dönerse, sistem onRestart() <b>2</b> metodunu çağırır, ardından hızlıca onStart() <b>3</b> ve onResume() <b>4</b> metodları çağrılır. Dikkat edilmesi gereken nokta onStop() metodu çağrıkmadan önce activity'nin hangi senaryo ile durdurulduğunun bir öneminin olmadığıdır.</td></tr>
</tbody></table>
<div>
<a name='more'></a><h3>
Stop Your Activity - Activity'yi Durdurma</h3>
</div>
<div>
Activity onStop() metoduna bir çağrı aldığında, artık görünür değildir ve kullanıcının kullanmadığı ve ihtiyaç duyulmayan bütün kaynakları serbest bırakmalıdır. Activity durdurulduktan sonra, sistem eğer sistem belleğine ihtiyaç duyarsa activity'nin instansını imha edebilir. Sıra dışı durumlarda, sistem uygulama işlemlerinizi activity'nin finali olan onDestroy() callback metodunu çağırmadan bitirebilir. Bu yüzden belleği dolduran kaynakları serbest bırakmak için onStop() metodunu kullanmak önemlidir. </div>
<div>
<br /></div>
<div>
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onStop()</span> metodundan önce <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onPause() </span>metodu çağrılmasına rağmen, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onStop()</span> metodunu veri tabanına bilgi girme işlemleri gibi daha fazla, daha geni CPU - Yoğun işlemleri kapatmayı gerçekleştirmek için kullanmalısınız.</div>
<div>
<br /></div>
<div>
Örneğin aşağıda kalıcı bir hafızaya bir taslak içeriğini kaydeden bir onStop() metodu implemantasyonu görülmektedir: </div>
<div>
<br /></div>
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">protected</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onStop</span><span class="pun" style="color: #666600;">()</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onStop</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// Always call the superclass method first</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Save the note's current draft, because the activity is stopping</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// and we want to be sure the current note progress isn't lost.</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">ContentValues</span><span class="pln" style="color: black;"> values </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">new</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">ContentValues</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;">
values</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">put</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">NotePad</span><span class="pun" style="color: #666600;">.</span><span class="typ" style="color: #660066;">Notes</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">COLUMN_NAME_NOTE</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> getCurrentNoteText</span><span class="pun" style="color: #666600;">());</span><span class="pln" style="color: black;">
values</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">put</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">NotePad</span><span class="pun" style="color: #666600;">.</span><span class="typ" style="color: #660066;">Notes</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">COLUMN_NAME_TITLE</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> getCurrentNoteTitle</span><span class="pun" style="color: #666600;">());</span><span class="pln" style="color: black;">
getContentResolver</span><span class="pun" style="color: #666600;">().</span><span class="pln" style="color: black;">update</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">
mUri</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// The URI for the note to update.</span><span class="pln" style="color: black;">
values</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// The map of column names and new values to apply to them.</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">null</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// No SELECT criteria are used.</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">null</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// No WHERE columns are used.</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
<div>
Activity durduğunda, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Activity </span>nesnesi bellekte yerleşik olarak korunur ve activity devam ettirildiğinde tekrar çağrılır. Resume durumuna çıkana kadar herhangi bir callback metodu sırasında oluşturulan bileşenleri tekrar başlatmanıza gerek kalmaz. Sistem aynı zamanda layout'daki görünüm için o anki duruma giden yolu saklar, böylece kullanıcı bir Edittext bileşenine bir metin girmişse, bu içerik tutulur bu şekilde kaydetmeye veya tekrar aynı metni girmeye ihtiyaç olmaz.<br />
<br />
<b>Not:</b> Activity durduğunda sistem activity'yi imha etse bile, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">View </span>nesnelerinin durumları sistem tarafından bir <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Bundle </span>(bohça) içinde korunur(bir EditText içinde bulunan metin gibi) ve activity'nin aynı instansına geri dönüldüğünde tekrardan bunlar işlenir. </div>
<div>
<h3>
Start/Restart Your Activity - Activity'yi Başlatma/Yeniden Başlatma</h3>
</div>
<div>
Activity durma halinden tekrardan öne çıktığında, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onRestart()</span> çağrısı alır. Activity her görünür olduğunda (veya oluşturulduğunda, yeniden başlatıldığında) sistem aynı zamanda <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onStart()</span> metodunu çağırır. <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onRestart()</span> metodu ancak sadece activity durdurulmuş halden devam haline geçerken çağrılır, böylece activity durdurulmuş ama imha edilmemiş bir haldeyken gerekli olabilecek özel restorasyon işlemlerini gerçekleştirmek için kullanılabilir.<br />
<br />
onRestart() metodu ile bir uygulamanın activity durumunu restore etmesi çok nadirdir bu yüzden bu metod için çoğu uygulama ile kullanılması gereken genel bir kural yoktur. Ancak, onStop() metodunun tüm activity kaynaklarını temizlemesi gerektiğinden, activity tekrar başladığında bu kaynaklar tekrardan başlatılır. Buna rağmen, activity ilk kez oluşturulduğunda yine de bu kaynakları başlatmaya ihtiyaç duyulur. Bu yüzden genelde onStart() metodu onStop() metoduna karşılık şekilde kullanılır. Çünkü sistem hem uygulamanızı oluşturduğunda hem de durmuş halindeyken tekrar başlattığında onStart() metodunu çağırır.<br />
<br />
Örneğin, bir kullanıcı uygulamanın başından çok uzun bir süre ayrılmış ve sonra tekrar geri gelmiş olsun, böyle bir durumda onStart() metodu gerekli sistem bilşenlerinin başlatılması için doğru yer olacaktır.<br />
<br />
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 1.5; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">protected</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onStart</span><span class="pun" style="color: #666600;">()</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onStart</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// Always call the superclass method first</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// The activity is either being restarted or started for the first time</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// so this is where we should make sure that GPS is enabled</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">LocationManager</span><span class="pln" style="color: black;"> locationManager </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">LocationManager</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> getSystemService</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">Context</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">LOCATION_SERVICE</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">boolean</span><span class="pln" style="color: black;"> gpsEnabled </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> locationManager</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">isProviderEnabled</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">LocationManager</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">GPS_PROVIDER</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">if</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">(!</span><span class="pln" style="color: black;">gpsEnabled</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Create a dialog here that requests the user to enable GPS, and use an intent</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// to take the user to the Settings screen to enable GPS when they click "OK"</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">protected</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onRestart</span><span class="pun" style="color: #666600;">()</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onRestart</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// Always call the superclass method first</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Activity being restarted from stopped state </span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
<div>
Sistem activity'nizi yok ettiğinde, activity'niz için onDestroy() metodunu çağırır. Çünkü genelde sistem kaynaklarını onStop() metodu ile serbest bırakırsınız, onDestroy() metoduna bir çağrı yapıldığında uygulamanın ihtiyaç duyacağı çok fazla şey yoktur. Bu metod belleğin temizlenmesi için kullanıcının son şansıdır. Bu yüzden burada hala çalışan thread'lerin sonlandığından ve her şeyin durdurulduğundan emin olmalısınız.</div>
</div>
Anonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.com0tag:blogger.com,1999:blog-7223671996023768700.post-54313480473309875302013-07-08T05:24:00.001-07:002013-07-08T07:04:43.119-07:00Pausing and Resuming an Activity - Bir Activirt'yi Duraklatma ve Devam EttirmeNormal bir uygulama kullanımı esnasında, bazen öndeki activity, activitynin duraklamasına sebep olan görsel bileşenler tarafından tıkalıdır. Örneğin yarı saydam bir activity açıldığında (dialog stilleri gibi), bir önceki activity duraklar. Activity kısmen görünür olduğunda ama bu aktiviteye odaklanılmadığı sürece duraklatılmış olarak kalır.<br />
<br />
Ancak, activity tamamen tıkalı ve görünmez olduğunda, durmaktadır.<br />
<br />
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Activity</span> duraklatma(paused) durumuna girdiğinde, sistem duraklatıldığında devam etmemesi gereken (bir video gibi) action'ları durdurmak için veya kullanıcının uygulamadan çıkmaya devam etmesi için kalıcı olarak kaydetmesi gerektiği durumlarda activity'deki <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onPause()</span> metodunu çağırır. Pause durumundan kullanıcı uygulamanıza geri döndüğünde sistem devam eder ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onResume()</span> metodunu çağırır.<br />
<br />
<b>Not: </b>Activity <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onPause()</span> çağrısı aldığında, bir süreliğine activity'nin duracağını ve kullanıcının activity'ye tekrar döneceğini gösteren bir işaret olabilir. Ancak, bu ilk olarak kullanıcının uygulamanızı terk ettiğine dair bir işarettir.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI9vU3KUl38WeGKuWnKWdrydjfQ7STkP-r1L-o_y_UOZZ_fKpldABxj5oIanjVt9Ddeqy0TF3V5fbePSAcELhtelOhLluHU9CfTCEKw02uMocPsMkGE0d143I7nUa2GdMHKFF5jZai_4Q/s1600/basic-lifecycle-paused.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI9vU3KUl38WeGKuWnKWdrydjfQ7STkP-r1L-o_y_UOZZ_fKpldABxj5oIanjVt9Ddeqy0TF3V5fbePSAcELhtelOhLluHU9CfTCEKw02uMocPsMkGE0d143I7nUa2GdMHKFF5jZai_4Q/s400/basic-lifecycle-paused.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: justify;">Şekil 1 - Yarı saydam bir activity, activity'nizi gizlediğinizde, sistem onPause() metodunu çağırır ve activity Pause durumunda bekler(1). Eğer kullanıcı pause durumundayken activity'ye döner ise sistem onResume() metodunu çağırır.</td></tr>
</tbody></table>
<br />
<a name='more'></a><br />
<h3>
Pause Your Activity - Activity'yi Duraklatma</h3>
<div>
Activity için sistem onPause() metodunu çağırdığında, bu teknik olarak activity'nin kısmen görünür olduğu anlamına gelir, fakat bu durum çoğunlukla kullanıcının uygulamayı terk ettiğinin ve activity'nin en yakın zamanda Stopped (Durmuş) durumuna geleceğinin işaretidir. Genellikle onPause() metodunu aşağıdakileri yapmak için kullanırsınız:</div>
<div>
<ul>
<li>CPU'yu kaynaklarını tüketebilecek animasyonlar veya diğer devam eden uygulamaları durdurmak için.</li>
<li>Kaydedilmemiş değişiklikleri işlemek için, fakat bu değişiklikler sadece kullanıcının uygulamayı terk ettiği zaman kaydedilmiş olmasını umduğu değişiklikler olmalı.(bir eposta taslağı gibi)</li>
<li>GPS, yayın alıcılar gibi şarj süresini etkileyebilecek kullanıcının ihtiyaç duymayacağı sistem kaynaklarını serbest bırakmak için.</li>
</ul>
<div>
Örneğin uygulamanız kamera kullanıyorsa, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onPause()</span> metodu kamerayı serbest bırakmak için iyi bir yerdir.</div>
</div>
<br />
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onPause</span><span class="pun" style="color: #666600;">()</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onPause</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// Always call the superclass method first</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Release the Camera because we don't need it when paused</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// and other activities might need to use it.</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">if</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">mCamera </span><span class="pun" style="color: #666600;">!=</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">null</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
mCamera</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">release</span><span class="pun" style="color: #666600;">()</span><span class="pln" style="color: black;">
mCamera </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">null</span><span class="pun" style="color: #666600;">;</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
<div>
Genelde, değişiklikleri kalıcı bir hafızaya kaydetmek için <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onPause()</span> metodunu kullanmamalısınız. (Bir forma girilen kişisel bilgiler gibi) . Sadece kullanıcının otomatik kaydedilmesini umduğu emin olduğunuz değişiklikleri <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onPause()</span> metodu içinde tutmalısınız. (eposta taslakları gibi). Ancak, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onPause()</span> durumunda bir veri tabanına kayıt yapmak gibi CPU yoğun işleri yapmaktan kaçınmanız gerekmektedir çünkü bu durum diğer activity'ye olan geçişi oldukça yavaşlatır. (böyle ağır yük içeren durumlar <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onStop()</span> metodunda olmalıdır.)<br />
<br />
<b>Not: </b>Activity duraklatıldığında (Pause durumunda), Activity instansı (örneği) bellekte yerleşiktir ve activity devam ettirildiğinde geri çağrılır. Devam (Resume) durumuna kadar olan callback metodlarının çağrılması esnasında oluşturulan bileşenleri tekrar oluşturmaya ihtiyaç gerek olmaz.<br />
<h3>
Resume Your Activity - Activity'yi Devam Ettirme</h3>
</div>
<div>
Kullanıcı Pause durumundaki bir activity'yi tekrar Resume (devam) konumuna getirdiğinde, sistem onResume() metodunu çağırır. Bu metodun ilk kez yaratılma durumu da dahil olmak üzere activity'nin her öne geldiğinde çağrıldığını unutmayın. Bu nedenle, onPause() sırasında bıraktığınız bileşenleri başlatmak için onResume() metodunu implement etmelisiniz ve activity'nin her Resume durumunda meydana gelmesi gereken diğer başlangıçları da yapmalısınız.</div>
<div>
<br /></div>
<div>
Aşağıda verilen onResume() örneği daha önce yukarıda verdiğimiz onPause() örneğinin karşılığıdır. Bu yüzden activity duraklatıldığında bırakılan kamerayı tekrar başlatır.</div>
<div>
<br /></div>
<div>
<div class="jd-descr" itemprop="articleBody" style="background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px;">
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 1.5; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onResume</span><span class="pun" style="color: #666600;">()</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onResume</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// Always call the superclass method first</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Get the Camera instance as the activity achieves full user focus</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">if</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">mCamera </span><span class="pun" style="color: #666600;">==</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">null</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
initializeCamera</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// Local method to handle camera init</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
</div>
<div class="content-footer layout-content-row" itemscope="" itemtype="http://schema.org/SiteNavigationElement" style="background-color: #f9f9f9; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; color: #222222; display: inline-block; font-family: Roboto, sans-serif; font-size: 14px; height: 30px; line-height: 19px; margin-bottom: 10px; margin-top: 10px; padding-top: 10px;">
</div>
</div>
Anonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.com0tag:blogger.com,1999:blog-7223671996023768700.post-83053052417287352582013-07-03T05:42:00.003-07:002013-07-08T04:52:24.927-07:00Starting an Activity - Bir Activity BaşlatmaUygulamaların main metodu ile başlatıldığı diğer programlamara benzemeyen Android sistemi kodu yaşam döngüsü (lifecycle) aşamalarına karşılık olan özel geri çağrı(callback) metodlarının yürütülmesi sayesinde Activity örneği ile başlar. Bir Activity'yi başlatırken ve bitirirken kullanılan bir dizi callback metodu bulunmaktadır.<br />
<h3>
Understand The Lifescycle Callbacks - Yaşam Döngüsü Geri Çağrılarını Anlama</h3>
<div>
Bir Activity'nin yaşam döngüsü boyunca, sistem bir piramide benzeyen bir dizi yaşam döngüsü metodu çağırır. Diğer bir deyişle, activity yaşam döngüsünün her aşamasında piramit üzerinde ayrı bir adıma sahiptir. Sistem yeni bir Activity örneği oluşturduğunda, her callback metodu activity durumunu bir adım yukarı doğru taşır. Piramidin tepesi activity'nin en önde çalıştığı ve kullanıcının onunla meşgul olduğu noktadır.<br />
<br />
Kullanıcı Activity'den ayrılmaya başladığında, sistem activity'yi bitirmek için tekrardan piramidin altına taşıyacak olan diğer metodları çağırır. Bazı durumlarda, activity kısmen taşınacak ve bekleyecektir (örneğin kullanıcı başka bir uygulamaya geçtiğinde), activity bu noktadan tekrar üste gelebilir ve kullanıcı kaldığı yerden devam edebilir.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZuHRJtZKNoYIFwp_nvh52G1kdCwDBZEJ6DdLqlUkKxDfoEtuuNnVMpcBH0Zi-xn-nhIS6r7XfmK6MjHHM773zq8fKiz4YcistsuewxYKsI6nxVEPUdX3TNHrEKTat310IW8kx6hjSFVk/s662/basic-lifecycle.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZuHRJtZKNoYIFwp_nvh52G1kdCwDBZEJ6DdLqlUkKxDfoEtuuNnVMpcBH0Zi-xn-nhIS6r7XfmK6MjHHM773zq8fKiz4YcistsuewxYKsI6nxVEPUdX3TNHrEKTat310IW8kx6hjSFVk/s400/basic-lifecycle.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: left;"><div style="text-align: justify;">
<b>Şekil 1 - </b>Activity yaşam döngüsünün basit bir görünümü piramit yapısı ile ifade edilmiştir. Bu şekil bir activity'nin duraklatıldığında ve tekrar devam ettirildiğinde veya bitirilip tekrardan başlatıldığında nasıl bir yaşam döngüsüne girdiğini gösteriyor.</div>
</td></tr>
</tbody></table>
<a name='more'></a>Aslında yazdığınız uygulamanın ne kadar karışık olduğuna bağlı olarak bütün yaşam döngüsü metodlarını implement etmenize gerek olmayacaktır. Ancak, Her bir metodu anlamanız ve uygulamanızın kullanıcıların tam olarak beklediği biçimde çalışacağından emin olarak implement edebilmeniz çok önemlidir.<br />
<br />
Activity için yaşam döngüsü metodlarını implement etme muhtemelen bir çok yönden uygulamanızın iyi bir davranış sergilemesini kesinleştirecektir. Bunları şöyle sıralayabiliriz:<br />
<ul>
<li>Kullanıcı uygulamanızı kullanırken bir telefon araması aldığında veya başka bir uygulamaya geçtiğinde uygulamanız çökmez.</li>
<li>Kullanıcı uygulamanızı kullanmayı bıraktığında uygulama sistem kaynaklarını tüketmeye devam etmez.</li>
<li>Kullanıcı uygulamanızı bırakıp bir süre sonra tekrar uygulamanıza devam ettiğinde yaptığı işlemleri kaybetmez.</li>
<li>Ekran yönü değiştiğinde kullanıcı uygulamanızda yaptığı değişiklikleri kaybetmez veya uygulamanız çökmez.</li>
</ul>
<div>
Şekil 1 de gösterilen farklı durumlar arasındaki activity geçişlerinde bir çok durum vardır. Ancaki bu durumlardan 3 tanesi statik olabilir. Yani activity aynı zamanda sadece bu üç durumdan birinde bulunabilir:<br />
<br />
<b>Devam Eden (Resumed)</b><br />
<ul>
<li>Bu durumda activity en öndedir ve kullanıcı onunla meşguldür. </li>
</ul>
<b>Duraklatılmış (Paused)</b><br />
<ul>
<li>Bu durumda activity başka bir activity tarafından gizlenmiştir - Önde olan diğer activity yarı saydamdır veya bütün ekranı kaplamaz. Duraklatılmış aktivity herhangi bir kullanıcı girişi almaz veya herhangi bir kod çalıştıramaz</li>
</ul>
<b>Durdurulmuş (Stopped)</b><br />
<ul>
<li>Bu durumda activity tamamen saklanmıştır ve kullanıcıya görünmez. Arka planda tutulur. Activity durdurulmuşken, activity instansları ve üye değişkenler gibi activity'ye ait olan tüm durum bilgileri tutulur. Fakat activity her hangi bir kod yürütemez.</li>
</ul>
<div>
Diğer durumlar (Oluşturma ve Başlatma) geçicidir ve sistem bu durumlardan çok çabuk yaşam döngüsü geri çağrı (lifecycle callback) metodunu çağırarak diğer durumlara geçer. Yani, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> sistem çağrısından sonra, hemen<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"> onStart()</span> çağrılır ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onResume()</span> ile devam edilir.<br />
<br />
Bu anlatılanlar bir activity'nin temel yaşam döngüsüdür. Şimdi bazı özel yaam döngüsü davranışlarını inceleyelim.</div>
<h3>
Specify Your App's Launcher Activity - Uygulamanın Başlatma Activity'sini Belirleme</h3>
<div>
Kullanıcı ana ekrandan uygulamanın ikonunu seçtiğinde, launcher (veya main) activity olarak belirlediğiniz Activity için <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> metodunu çağırır. Bu activity kullanıcı arayüzünün ana giriş noktası olarak hizmet eder.</div>
<div>
<br /></div>
<div>
Android manifest dosyasında hangi activity'yi ana giriş ekranı olarak tanımlamak istediğinizi belirleyebilirsiniz. <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">AndroidManifest.xml</span> dosyası projenin köküdür. </div>
<div>
<br /></div>
<div>
Uygulamanızda bulunan ana activity manifest dosyasında <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">LAUNCHER </span>kategorisini ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">MAIN </span>action'ını içeren<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"> <intent-filter></span> ile birlikte bildirilmelidir.</div>
<div>
<br /></div>
<div>
Örneğin:</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="tag" style="color: #000088;"><activity</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">android:name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">".MainActivity"</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">android:label</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"@string/app_name"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><intent-filter></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><action</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">android:name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"android.intent.action.MAIN"</span><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;">/></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><category</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">android:name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"android.intent.category.LAUNCHER"</span><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;">/></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"></intent-filter></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"></activity></span></pre>
</div>
<div>
<b>Not: </b>SDK araçları ile yeni bir android projesi oluşturduğunuzda, varsayılan proje dosyaları filtreli bir manifest içinde bildirilmiş bir Activity sınıfını zaten içerir. </div>
</div>
<div>
<br /></div>
<div>
Activity'lerinizden herhangi biri için MAIN action veya LAUNCHER kategorisi bildirilmediğinde, uygulama ikonu ana ekranda belirmez.</div>
<h3>
Create a New Instance - Yeni Bir Instans Oluşturmak</h3>
<div>
Çoğu uygulama kullanıcının farklı action'ları başlatabilmesine olanak veren bir çok activity içerir. Bir activity kullanıcı uygulama ikonuna tıkladığında yaratılan main activity veya kullanıcının bir action'ınına cevap olarak oluşturulmuş olan farklı bir activity olsun, sistem <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> metodunu çağırarak yeni bir <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Activity </span>instansı oluşturur.<br />
<br />
Activity'nin bütün yaşamı boyunca bir kez olması gereken tamel uygulama başlangıç mantığının gerçekleştirilmesi için <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> metodu implement edilmelidir. Örneğin, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> metod immplementasyonu kullanıcı arayüzünü ve mümkün olan bütün sınıf kapsamlı değişkenleri tanımlamalıdır.<br />
<br />
Mesela, aşağıda verilen <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> metodu örneği kullanıcı arayüzü (XML Layout dosyasında belirlenen), tanımlanan üye değişkenler ve kullanıcı arayüzü konfigürasyonları gibi activity için kullanılan temel ayarları gerçekleştirir. </div>
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="typ" style="color: #660066;">TextView</span><span class="pln" style="color: black;"> mTextView</span><span class="pun" style="color: #666600;">;</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// Member variable for text view in the layout</span><span class="pln" style="color: black;">
</span><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onCreate</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">Bundle</span><span class="pln" style="color: black;"> savedInstanceState</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onCreate</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">savedInstanceState</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Set the user interface layout for this Activity</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// The layout file is defined in the project res/layout/main_activity.xml file</span><span class="pln" style="color: black;">
setContentView</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">R</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">layout</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">main_activity</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Initialize member TextView so we can manipulate it later</span><span class="pln" style="color: black;">
mTextView </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">TextView</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> findViewById</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">R</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">id</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">text_message</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Make sure we're running on Honeycomb or higher to use ActionBar APIs</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">if</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">Build</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">VERSION</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">SDK_INT </span><span class="pun" style="color: #666600;">>=</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">Build</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">VERSION_CODES</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">HONEYCOMB</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// For the main activity, make sure the app icon in the action bar</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// does not behave as a button</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">ActionBar</span><span class="pln" style="color: black;"> actionBar </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> getActionBar</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;">
actionBar</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">setHomeButtonEnabled</span><span class="pun" style="color: #666600;">(</span><span class="kwd" style="color: #000088;">false</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
<div>
<span style="color: #6fa8dc; font-family: Courier New, Courier, monospace;">onCreate() </span>çalışmasını sonlandırdığında, sistem arkası arkasına hemen <span style="font-family: Courier New, Courier, monospace;"><span style="color: #3d85c6;">onStart()</span> </span>ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onResume() </span>metodlarını çağırır. Activity asla, oluşturulmuş(Created) veya başlatılmış(Started) durumunda kalmaz. Teknik olarak <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onStart() </span>çağrıldığında activity kullanıcıya görünür olur, fakat ardından <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onResume()</span> hemen başlar ve kullanıcıyı yönlendiren veya ekranı kapatan telefon çağrısı gibi durumu değiştiren bir olay meydana gelinceye kadar activity Resume durumunda kalır.</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9RTH-gJbWVlH4eDxSG0VPU8_APzyQgbDA-MWQKvTWEgOsNuBJbX-G13llFRfQmHPFecTMzZvTUiU262LM536FlXoESSKX3dFEgY-iZoElhMM0K3Y1wbZ30cX26lFhR0OTWW2ByLyODoM/s1600/basic-lifecycle-create.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="177" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9RTH-gJbWVlH4eDxSG0VPU8_APzyQgbDA-MWQKvTWEgOsNuBJbX-G13llFRfQmHPFecTMzZvTUiU262LM536FlXoESSKX3dFEgY-iZoElhMM0K3Y1wbZ30cX26lFhR0OTWW2ByLyODoM/s400/basic-lifecycle-create.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: justify;"><b>Şekil 2 - </b> Activity yaşam süreci ile ilgili yeni bir activity instansı oluşturulduğunda sistem tarafından sırasıyla çağrılan 3 ana call-back metoduna ait başka bir gösterim: onCreate(), onStart(), ve onResume(). Bu işlem sırası tamamlandığında, kullanıcı başka bir activity'ye geçinceye kadar mevcut activity onResume() durumunda kalır.</td></tr>
</tbody></table>
<h3>
Destroy the Activity - Activity'yi Yok Etme</h3>
<div>
Activity birinci yaşam sürecinde yani <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> durumunda iken, onun en son callbak'i <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onDestroy()</span> durumudur. Sistem, activity instansı sistem belleğinden tamamen kaldırılıp bitiş sinyali activity tarafından gönderildiğinde bu metod çağrılır.</div>
<div>
<br /></div>
<div>
Çoğu uygulama bu metodu implement etmeye gerek duymaz çünkü yerel sınıf referansları activity ile birlikte yokedilir ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onPause()</span> ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onStop()</span> durumunda en fazla temizliği yapmalıdır. Ancak, activity arksında oluşturma esnasında başlatılmış geri plan thread'leri varsa bunlar <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onDestroy()</span> durumunda sonlandırılmalıdır.</div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onDestroy</span><span class="pun" style="color: #666600;">()</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onDestroy</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;"> </span><span class="com" style="color: #880000;">// Always call the superclass</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Stop method tracing that the activity started during onCreate()</span><span class="pln" style="color: black;">
android</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">os</span><span class="pun" style="color: #666600;">.</span><span class="typ" style="color: #660066;">Debug</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">stopMethodTracing</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
</div>
<div>
<b>Not: </b>Sadece bir durum haricinde sistem <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onPause()</span> ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onStop()</span> çağrıldıktan sonra <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onDestroy()</span>'u çağırır. Bu durum <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> ile<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"> finish()</span>'i çağırmanızdır. Başka bir activity'yi çalıştırmak için activity karar verici gibi davrandığı bazı durumlarda, activity'yi bitirmek için <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> içinden <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">finish()</span> metodunu çağırabilirsiniz. Bu durumda, sistem doğruca diğer yaşam döngüsü metodlarını çağırmadan <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onDestroy()</span> metodunu çağırır.</div>
</div>
Anonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.com0tag:blogger.com,1999:blog-7223671996023768700.post-54026802463570428152013-07-03T04:37:00.002-07:002013-07-03T05:21:07.817-07:00Managing the Activity Lifecycle - Activity Yaşam Sürecini YönetmeBir kullanıcı uygulamanızda gezinirken, uygulamanızdan çıkarken ve tekrar uygulamanıza döndüğünde uygulamanızdaki Activity instansları yaşam süreleri boyunca farklı durumlar arasında geçiş yaparlar. Örneğin, activity'niz ilk defa başlatıldığında sistemde en öne gelir ve kullanıcının dikkatini çeker. Bu işlem sırasında Android sistemi activity içinde bulunan, kullanıcı ara yüzünü ve diğer bileşenleri ayarlamak için, bir dizi yaşam süreci (lifescyle) metodu çağırır. eğer kullanıcı başka bir activity başlatırsa veya yeni bir uygulamaya geçerse, sistem uygulama arka plana gider gitmez activity'nizde bulunan başka yaşam süreci (lifescyle) metodlarını çağırır. (bunun için activity'nin artık görünmez ve durumunun bızulmamış olması gereklidir)<br />
<br />
<a name='more'></a><br />
Yaşam süreci geri çağırma metodları ile kullanıcı activity'yi terk ettiğinde ve activity'ye geri döndüğünde activity'nin nasıl davranacağını belirleyebilirsiniz. Örneğin bir video oynatma uygulaması yapıyorsanız, filmi durdurup internet bağlantısını keserek başka bir uygulamaya geçebilirsiniz. Kullanıcı geri döndüğünde internet bağlantısını tekrar kurdurup filmin kaldığı yerden devam etmesini sağlayabilirsiniz.<br />
<br />
Bundan sonraki bölümlerde lifescyle callback metodlarının önemi anlatılacak ve bir uygulamayı faaliyete geçirdiğinizde kullanıcıların bekledikleri etkinlikleri ve activity'ye ihtiyaç olmadığında sistem kaynaklarını tüketmesinin önüne nasıl geçileceği anlatılacaktır.Anonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.com0tag:blogger.com,1999:blog-7223671996023768700.post-60518168914564581872013-07-01T06:49:00.002-07:002013-07-02T07:15:50.031-07:00Starting Another Activity - Başka Bir Activity Başlatma<h2>
Starting Another Activity - Başka Bir Activity Başlatma</h2>
<div>
Önceki yayınımızdaki işlemleri tamamladığınızda bir butona ve textfield a sahip bir activity gösteren bir uygulama yapmış oldunuz. Bu yayınımızda<span style="color: #38761d; font-family: Courier New, Courier, monospace;"> MainActivity</span>'ye yeni kodlar ekleyerek gönder butonuna bastığınızda yeni bir activity'yi nasıl başlatacağınızdan bahsedeceğiz.<br />
<br />
<a name='more'></a><br />
Gönder Butonuna Cevap verme</div>
<div>
Gönder butonuna basıldığında on-click olayına bir cevap vermek için, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">activity_main.xml</span> layout'unu açarak <Button> elemanına <span style="color: #38761d; font-family: Courier New, Courier, monospace;">android:onClick</span> özelliği eklenir:</div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="tag" style="color: #000088;"><Button</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_width</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"wrap_content"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_height</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"wrap_content"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:text</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"@string/button_send"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:onClick</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"sendMessage"</span><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;">/></span></pre>
</div>
<div>
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">android:onClick </span>özelliğinin değeri <span style="color: #38761d; font-family: Courier New, Courier, monospace;">"sendMessage"</span> kullanıcının butona tıkladığı zaman sistem tarafından çağrılan ve activity'nizde bulunan bir metodun ismidir.</div>
<div>
<br /></div>
<div>
Bu değere karşılık oluşturmak için <span style="color: #38761d; font-family: Courier New, Courier, monospace;">src/</span> klasörü altında bulunan <span style="color: #38761d; font-family: Courier New, Courier, monospace;">MainActivity </span>sınıfını açıp bu metodu aşağıdaki gibi eklemeniz gerekmektedir.</div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="com" style="color: #880000;">/** Called when the user clicks the Send button */</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> sendMessage</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">View</span><span class="pln" style="color: black;"> view</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Do something in response to button</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
</div>
<div>
Bu işlemi yaptığınızda sınıfınıza <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">View </span>sınıfını da import etmeniz gerekmektedir:</div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="kwd" style="color: #000088;">import</span><span class="pln" style="color: black;"> android</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">view</span><span class="pun" style="color: #666600;">.</span><span class="typ" style="color: #660066;">View</span><span class="pun" style="color: #666600;">;</span></pre>
</div>
<div>
<b>İpucu:</b> Eksik import işlemlerini yapmak için Eclipse'de Ctrl + Shift + O tuşlarına birlikte basmanız yeterli olacaktır.</div>
<div>
<br /></div>
<div>
Bu metodun android:onClick özelliğinde verilen isimle eşleşmesi için bütün özelliklerin aşağıda verildiği gibi olması gerekmektedir:</div>
<div>
<ul>
<li>Public olmalı</li>
<li>Return değerinin void olması gerekli</li>
<li>Parametre olarak sadece View almalı (Tıklandığında bu bir View oluşturacak)</li>
</ul>
<div>
Daha sonra bu metodu doldurarak textfield içeriğini okuyup içinde bulunan metni başka bir activity ekranına gönderebileceksiniz.</div>
</div>
<h3>
Bir Intent oluşturma</h3>
<div>
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Intent </span>farklı bileşenler arasında (İki activity gibi) çalışma zamanı bağlayıcısı (runtime binding) olarak kullanılan bir nesnedir. <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Intent </span>bir uygulamanın yapmak istediği şeyi yani uygulamanın niyetini temsil eder. Intent'ler çok değişik türdeki görevleri yerine getirmek için kullanılabilirler fakat genelde başka bir activity'yi başlatmak için kullanılırlar.<br />
<br />
<span style="color: #38761d; font-family: Courier New, Courier, monospace;">DisplayMessageActivity </span>adında başka bir activity'yi başlatmak için <span style="color: #38761d; font-family: Courier New, Courier, monospace;">sendMessage()</span> metodunun içinde bir <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Intent </span>oluşturalım:<br />
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="typ" style="color: #660066;">Intent</span><span class="pln" style="color: black;"> intent </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">new</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">Intent</span><span class="pun" style="color: #666600;">(</span><span class="kwd" style="color: #000088;">this</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">DisplayMessageActivity</span><span class="pun" style="color: #666600;">.</span><span class="kwd" style="color: #000088;">class</span><span class="pun" style="color: #666600;">);</span></pre>
<div>
Burada kullanılan konstraktır iki parametre almaktadır:</div>
<div>
<ul>
<li>Birinci parametre bir <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Context</span>'dir (<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Activity </span>sınıfı bir <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Context </span>alt sınıfı olduğundan <span style="color: #38761d; font-family: Courier New, Courier, monospace;">this </span>değeri kullanılmıştır)</li>
<li>Burada kullanılan ikinci parametre değeri ise sistem<span style="color: #3d85c6;"> <span style="font-family: Courier New, Courier, monospace;">Intent</span></span>'i kime teslim edecekse ona ait uygulama bileşeni <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">sınıfı(class)</span> dır.(Burada başlatılacak activity'ye ait sınıftır.)</li>
</ul>
<div>
<b>Not:</b> <span style="color: #38761d; font-family: Courier New, Courier, monospace;">DisplayMessageActivity</span>' ye bir referans tanımlamak eğer Eclipse gibi bir ide kullanıyorsanız bu sınıf hali hazırda mevcut olmadığı için hataya sebep olacaktır. Bu hatayı görmezden gelin. En kısa zamanda bu sınıfı ekleyeceğiz.<br />
<br /></div>
</div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;">Diğer uygulamalara bir intent yollama
<div>
Buraya kadar bahsettiğimiz <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">intent </span>açık bir <span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;">intent</span>'di, Çünkü bir <span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;">Intent</span> önderilmesi gereken yere tam bir uygulama bileşeni oluşturur. Ancak <span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;">Intent</span>'ler, Intent'in bir bileşeni istediğini belirtmediğinde fakat değişik <span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;">Intent</span> parametrelerinde belirlenmiş action'lar için meta-data özellikleri karşılandığı sürece cihazda yüklü herhangi bir uygulamaya izin verdiği zaman üstü kapalı da olabilir. Daha sonra uygulamaların kendi aralarında haberleşmesi konusunda bir yayın oluşturulacaktır.</div>
</pre>
Bir intent sadece yeni bir activity başlatmanızı sağlamaz aynı zamanda activity'ye bir dolu veri de taşıyabilir. <span style="color: #38761d; font-family: Courier New, Courier, monospace;">sendMessage()</span> metodunun içerisinde, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">EditText </span>elemanını almak ve ona ait metin içeriğini Intent'e eklemek için <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">findViewById()</span> kullanın:<br />
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="typ" style="color: #660066;">Intent</span><span class="pln" style="color: black;"> intent </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">new</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">Intent</span><span class="pun" style="color: #666600;">(</span><span class="kwd" style="color: #000088;">this</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">DisplayMessageActivity</span><span class="pun" style="color: #666600;">.</span><span class="kwd" style="color: #000088;">class</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">EditText</span><span class="pln" style="color: black;"> editText </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">EditText</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> findViewById</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">R</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">id</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">edit_message</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">String</span><span class="pln" style="color: black;"> message </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> editText</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">getText</span><span class="pun" style="color: #666600;">().</span><span class="pln" style="color: black;">toString</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;">
intent</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">putExtra</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">EXTRA_MESSAGE</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> message</span><span class="pun" style="color: #666600;">);</span></pre>
<div>
<b>Not:</b> Şimdi <span style="color: #38761d; font-family: Courier New, Courier, monospace;">android.content.Intent</span> ve <span style="color: #38761d; font-family: Courier New, Courier, monospace;">android.widget.EditText</span> importlarını eklemeniz gerekir. Biraz sonra <span style="color: #38761d; font-family: Courier New, Courier, monospace;">EXTRA_MESSAGE</span> sabitini tanımlayacağız.</div>
<div>
<br /></div>
<div>
Bir Intent extra diye adlandırılan çok çeşitli veri tiplerine ait bir veri koleksiyonunu taşıyabilir. putExtra() metodu ilk parametre olarak anahtar ismini ve ikinci parametre olarak ise değeri alır. </div>
<div>
<br /></div>
<div>
Bir sonraki activity extra veri sorgulayacağı için, intentiniz için public sabitini kullanan bir anahtar tanımlamalısınız, Bu yüzden MainActivity sınıfının üzerine EXTRA_MESSAGE ekleyin:</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">class</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">MainActivity</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">extends</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">Activity</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">final</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">static</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">String</span><span class="pln" style="color: black;"> EXTRA_MESSAGE </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="str" style="color: #008800;">"com.example.myfirstapp.MESSAGE"</span><span class="pun" style="color: #666600;">;</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">...</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
</div>
<div>
Genelde kullanılacak intentler için key tanımlarket ön ek olarak uygulamanızın paket ismini kullanmak güzel bir yöntem olarak kabul edilir. Bu durum eğer uygulamanız başka bir uygulama ile haberleşecek olursa keylerinizin benzersiz olmasını garanti eder. </div>
<div>
<br /></div>
<h3>
İkinci bir activity başlatma</h3>
<div>
Bir activity başlatmak için, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">startActivity()</span>' yi çağırın ve bunu <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Intent</span>'e geçirin. Sistem bu çağrıyı alır ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Intetnt </span>tarafından belirlenen <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">activity</span>'nin bir örneğini başlatır. </div>
<div>
<br /></div>
<div>
Bu yeni kodla gönder butonu tarafından çağrılacak olan <span style="color: #38761d; font-family: Courier New, Courier, monospace;">sendMessage()</span> metodu tamamlanmış olur:</div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="com" style="color: #880000;">/** Called when the user clicks the Send button */</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> sendMessage</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">View</span><span class="pln" style="color: black;"> view</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">Intent</span><span class="pln" style="color: black;"> intent </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">new</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">Intent</span><span class="pun" style="color: #666600;">(</span><span class="kwd" style="color: #000088;">this</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">DisplayMessageActivity</span><span class="pun" style="color: #666600;">.</span><span class="kwd" style="color: #000088;">class</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">EditText</span><span class="pln" style="color: black;"> editText </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">EditText</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> findViewById</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">R</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">id</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">edit_message</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">String</span><span class="pln" style="color: black;"> message </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> editText</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">getText</span><span class="pun" style="color: #666600;">().</span><span class="pln" style="color: black;">toString</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;">
intent</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">putExtra</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">EXTRA_MESSAGE</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> message</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
startActivity</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">intent</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
</div>
<div>
<span class="pun" style="color: #666600;"><br /></span></div>
<div>
Şimdi bunların çalışması için <span style="color: #38761d; font-family: Courier New, Courier, monospace;">DisplayMessageActivity</span> sınıfının oluturulması gerekli.</div>
<div>
<br /></div>
<h3>
İkinci Bir Activity Oluşturmak</h3>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3jb2qWYrzDIB0S1s9pW7ChfoFY-J48eZGVzma_csncV3sp17dWGnMrGDKo1DOM6Pk1r2V3yLmZTpy1vr3q_sIH8waPKzeRetf-_3IDZZ-RJxXfC-n8G9YLifDMl7eIYC-SLeKARNAVOU/s400/adt-new-activity.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3jb2qWYrzDIB0S1s9pW7ChfoFY-J48eZGVzma_csncV3sp17dWGnMrGDKo1DOM6Pk1r2V3yLmZTpy1vr3q_sIH8waPKzeRetf-_3IDZZ-RJxXfC-n8G9YLifDMl7eIYC-SLeKARNAVOU/s1600/adt-new-activity.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Resim 1. </b>Eclipse için yeni activity sihirbazı.</td></tr>
</tbody></table>
<div>
Eclipse kullanarak yeni bir activity oluşturmak için: </div>
<div>
<ol>
<li>Araç çubuğundan <b>new</b>'i tıklayın</li>
<li>Açılan pencerede, <b>Android </b>klasörünü açın ve <b>Android Activity</b>'yi seçin. <b>Next</b>'i tıklayın.</li>
<li><b>BlankActivity</b>'yi seçin ve <b>Next</b>'i tıklayın.</li>
<li>Activity aytıntılarını doldurun:</li>
<ul>
<li><b>Project: </b>MyFirstApp</li>
<li><b>ActivityName: </b>DisplayMessageActivity</li>
<li><b>Layout Name: </b>activity_display_message</li>
<li><b>Title: </b>My Message</li>
<li><b>Hierarchical Parent: </b>com.example.myfirstapp.MainActivity</li>
<li><b>Navigation Type: </b>None</li>
</ul>
</ol>
<div>
<b>Next</b>'i tıklayın.</div>
</div>
<div>
<br /></div>
<div>
<span style="color: #38761d; font-family: Courier New, Courier, monospace;">DisplayMessageActivity.java</span> dosyasını açın.<br />
<br />
<ul>
<li>Bu sınıfın gerekli olan <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> metodunu zaten implement ettiğini göreceksiniz.</li>
<li>Aynı zamanda <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreateOptionsMenu()</span> metodunun da implement edildiğini görüyorsunuz, fakat bu uygulamada buna ihtiyaç duymadığımız için bu implementi olduğu gibi kaldırabilirsiniz.</li>
<li>Aynı zamanda <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreateOptionMenu()</span> de implement edilmiş. bu işlem çubuğunun yukarı davranışı için davranışlar tutar. Bu şekilde kalsın silmeyin.</li>
</ul>
<div>
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">ActionBar </span>APIleri sadece <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">HONEYCOMB </span>(API seviye 11) ve üzerinde bulunduğundan platform versiyonunu anlamak için <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">getActionBar()</span> metodu etrafına bir şart eklememiz gerekir. Ek olarak, <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">lint </span>hatalarından kaçınmak için<span style="color: #38761d; font-family: Courier New, Courier, monospace;">@SuppressLint("NewApi")</span> tagı <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> metotuna eklenmelidir.</div>
</div>
<div>
<br />
<span style="color: #38761d; font-family: Courier New, Courier, monospace;">DisplayMessageActivity </span>sınıfı aşağıdaki gibi görüntülenmelidir:<br />
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">class</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">DisplayMessageActivity</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">extends</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">Activity</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="lit" style="color: #006666;">@SuppressLint</span><span class="pun" style="color: #666600;">(</span><span class="str" style="color: #008800;">"NewApi"</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;">
</span><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">protected</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onCreate</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">Bundle</span><span class="pln" style="color: black;"> savedInstanceState</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onCreate</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">savedInstanceState</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
setContentView</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">R</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">layout</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">activity_display_message</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Make sure we're running on Honeycomb or higher to use ActionBar APIs</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">if</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">Build</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">VERSION</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">SDK_INT </span><span class="pun" style="color: #666600;">>=</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">Build</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">VERSION_CODES</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">HONEYCOMB</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Show the Up button in the action bar.</span><span class="pln" style="color: black;">
getActionBar</span><span class="pun" style="color: #666600;">().</span><span class="pln" style="color: black;">setDisplayHomeAsUpEnabled</span><span class="pun" style="color: #666600;">(</span><span class="kwd" style="color: #000088;">true</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">boolean</span><span class="pln" style="color: black;"> onOptionsItemSelected</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">MenuItem</span><span class="pln" style="color: black;"> item</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">switch</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">item</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">getItemId</span><span class="pun" style="color: #666600;">())</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">case</span><span class="pln" style="color: black;"> android</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">R</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">id</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">home</span><span class="pun" style="color: #666600;">:</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">NavUtils</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">navigateUpFromSameTask</span><span class="pun" style="color: #666600;">(</span><span class="kwd" style="color: #000088;">this</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">return</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">true</span><span class="pun" style="color: #666600;">;</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">return</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onOptionsItemSelected</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">item</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
</div>
<div>
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Activity </span>sınıflarının tamamında <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> motodunun implement edilmesi gerekmektedir. Activity'den yeni bir instans üretilir üretilmez sistem bu metodu çağırır. Bu metod <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">setContentView()</span> metodu ile activity layoutunuzu tanımlamanız gereken ve activity bileşenleri için başlangıç ayarlarını uygulamanız gereken yerdir. </div>
<div>
<br /></div>
<div>
Uygulama şu an çalıştırılabilir. Eğer gönder butonuna basarsanız şablon tarafından sağlanan ve Hello World mesajını veren ikinci activity başlar. Aşağıda bu mesajı birinci activity den bir intent yardımı ile gönderilen mesajla nasıl değiştirileceği anlatılmıştır.<br />
<br />
<h3>
Intent alma</h3>
</div>
<div>
Kullanıcının nasıl oraya vardığına bakmadan her <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Activity</span> bir <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Intent</span> ile çağrılır. Uygulamayı başlatan <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Intent</span>'i <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">getIntent()</span> metodunu çağırarak alabilirsiniz ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Intent </span>içinde bulunan veriyi kullanabilirsiniz.</div>
<div>
<br /></div>
<div>
<span style="color: #38761d; font-family: Courier New, Courier, monospace;">DisplayMessageActivity </span>sınıfının <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">onCreate()</span> metodunda, <span style="color: #38761d; font-family: Courier New, Courier, monospace;">MainActivity </span>tarafından dağıtılan Intent'i alın ve içindeki mesajı açın:</div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="typ" style="color: #660066;">Intent</span><span class="pln" style="color: black;"> intent </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> getIntent</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">String</span><span class="pln" style="color: black;"> message </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> intent</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">getStringExtra</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">MainActivity</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">EXTRA_MESSAGE</span><span class="pun" style="color: #666600;">);</span></pre>
</div>
<div>
<h3>
Mesajı Görüntüleme</h3>
</div>
<div>
Mesajı ekranda göstermek için, bir <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">TextView</span> aracı oluşturun ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">setText()</span> kullanarak metni ayarlayın. Daha sonra <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">setContentView()</span>'e geçirerek activity layout'unun kök görünümüne <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">TextView</span> ekleyin.</div>
<div>
<br /></div>
<div>
DisplayMessageActivity için onCreate() metodunun son hali aşağıdaki gibi olmalıdır:</div>
<div>
<br /></div>
<div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="lit" style="color: #006666;">@Override</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">public</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">void</span><span class="pln" style="color: black;"> onCreate</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">Bundle</span><span class="pln" style="color: black;"> savedInstanceState</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="kwd" style="color: #000088;">super</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">onCreate</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">savedInstanceState</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Get the message from the intent</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">Intent</span><span class="pln" style="color: black;"> intent </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> getIntent</span><span class="pun" style="color: #666600;">();</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">String</span><span class="pln" style="color: black;"> message </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> intent</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">getStringExtra</span><span class="pun" style="color: #666600;">(</span><span class="typ" style="color: #660066;">MainActivity</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">EXTRA_MESSAGE</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Create the text view</span><span class="pln" style="color: black;">
</span><span class="typ" style="color: #660066;">TextView</span><span class="pln" style="color: black;"> textView </span><span class="pun" style="color: #666600;">=</span><span class="pln" style="color: black;"> </span><span class="kwd" style="color: #000088;">new</span><span class="pln" style="color: black;"> </span><span class="typ" style="color: #660066;">TextView</span><span class="pun" style="color: #666600;">(</span><span class="kwd" style="color: #000088;">this</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
textView</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">setTextSize</span><span class="pun" style="color: #666600;">(</span><span class="lit" style="color: #006666;">40</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
textView</span><span class="pun" style="color: #666600;">.</span><span class="pln" style="color: black;">setText</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">message</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="com" style="color: #880000;">// Set the text view as the activity layout</span><span class="pln" style="color: black;">
setContentView</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">textView</span><span class="pun" style="color: #666600;">);</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
</div>
<div>
Şimdi uygulamayı çalıştırabilirsiniz. Uygulama açıldığında, textfield içine bir mesaj yazın, gönder butonuna tıklayın ve mesaj ikinci activity' de belirecektir.</div>
<div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4XFVkRB2TCivEGC9nTVibfFTPNJgCj2XwA2u8lLVTQmC6-aJ2jqDO-ti9bLKllqDVJrlFiKqNS2Dw2_mkgKf4Y5MBlIE3rgwr52-qTSSB0dPKT9JDPkoUccCM3I6X44pw2Mod9QuHnXE/s506/firstapp.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4XFVkRB2TCivEGC9nTVibfFTPNJgCj2XwA2u8lLVTQmC6-aJ2jqDO-ti9bLKllqDVJrlFiKqNS2Dw2_mkgKf4Y5MBlIE3rgwr52-qTSSB0dPKT9JDPkoUccCM3I6X44pw2Mod9QuHnXE/s1600/firstapp.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Resim 2. </b>Uygulama bittiğinde iki activity ekranının görüntüsü.</td></tr>
</tbody></table>
İşte hepsi bukadar, ilk uygulamanızı yapmış oldunuz.<br />
<br />
Daha fazla bilgi edinmek için sonraki yayınlarımızı takip edebilirsiniz.</div>
</div>
Anonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.com2tag:blogger.com,1999:blog-7223671996023768700.post-1652099768046277342013-07-01T02:05:00.002-07:002013-07-02T07:16:10.680-07:00Building a Simple User Interface - Basit bir Kullanıcı Arayüzü oluşturma<h2>
Building a Simple User Interface - Basit bir Kullanıcı Arayüzü oluşturma</h2>
<div>
Android'de grafik kullanıcı arayüzü <span style="color: #3d85c6;"><span style="font-family: Courier New, Courier, monospace;">View</span> </span>ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">ViewGroup </span>nesnelerini kullanan bir hiyerarşik yapı içerisinde oluşturulur. <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">View</span><span style="color: #3d85c6;"> </span>nesneleri textfield veya butonlar gibi kullanıcı arayüzü bileşenlerinden oluşur, <span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;">ViewGroup</span><span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;"> </span>nesneleri ise <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">View</span><span style="color: #3d85c6;"> </span>nesnelerinin nasıl görüntüleneceğini belirleyen grid veya dikey liste gibi görünmez konteyner nesnelerinden oluşur.<br />
<br />
<a name='more'></a></div>
<div>
Android <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">View</span><span style="color: #3d85c6;"> </span>ve <span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;">ViewGroup</span><span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;"> </span>alt sınıflarına karşılık gelen XML kütüphanesi desteği vermektedir. Böylece kullanıcı arayüzü elemanlarını bir hiyerarşi içinde XML'de tanımlayabilirsiniz.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA0RGNQOHDLqCPZOYm-2_JhtmP4ojphd_ehf8vK9gabqCoFIEsLAoGXPUgD2G0nK0VRRu4U__Dvgp7_LNMXUaWP4r9OACcwGgO5uAH6XFJwWGuAiXDeVF94brqe0aOMFfwwyQW-fjnato/s474/viewgroup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA0RGNQOHDLqCPZOYm-2_JhtmP4ojphd_ehf8vK9gabqCoFIEsLAoGXPUgD2G0nK0VRRu4U__Dvgp7_LNMXUaWP4r9OACcwGgO5uAH6XFJwWGuAiXDeVF94brqe0aOMFfwwyQW-fjnato/s1600/viewgroup.png" /></a></div>
<br />
<b>Şekil 1. </b>Bir <span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;">ViewGroup</span><span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;"> </span> nesnesinin <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">View</span><span style="color: #3d85c6;"> </span>nesneleri ile birlikte diğer <span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;">ViewGroup</span><span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;"> </span> esnelerini nasıl barındırdığı ile ilgili ağaç yapısı.<br />
<br />
Bu yazımızda bir textfield ve bir butona sahip bir XML planının nasıl oluşturulacağı anlatılacaktır.<br />
<h2>
Create a Linear Layout - Lineer Düzen Oluşturma</h2>
<div>
<span style="color: #38761d; font-family: Courier New, Courier, monospace;">res/layout/</span> klasörünün altında bulunan<span style="color: #38761d; font-family: Courier New, Courier, monospace;"> activity_main.xml </span>dosyasını açın.</div>
<div>
<b><br /></b></div>
<div>
<b>Not: </b>Eclipse'de bir düzen (Layout) dosyası açtığınızda, ilk önce Grafiksel Düzen Editörü görüntülenir. Bu editör grafik arayüzünü kolay olarak tasarlayabilmek için kullanılan bir araçtır. Bu yazımızda direk olarak XML ile çalışma anlatılacağından XML editörünü açmak için ekranın altında bulunan <i>activity_main.xml </i>tabını tılamanız gerekmektedir.</div>
<div>
<br /></div>
<div>
<span style="color: #38761d; font-family: Courier New, Courier, monospace;">activity_main.xml</span> dosyasını içeren ilk projenizi oluşturduğunuz zaman bir <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">RelativitLayout </span>temel görünümü ve bir <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">TextView </span>alt görünümü ile birlikte BlankActivity şablonunu seçmiş oldunuz.</div>
<div>
<br /></div>
<div>
İlk önce <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"><TextView></span> elemanını silin ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"><RelativeLayout></span> elemanını<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"> <LinearLayout></span> elemanına değiştirin. Daha sonra android:orientation özelliğini ekleyip değerini <span style="color: #38761d; font-family: Courier New, Courier, monospace;">"horizontal"</span> olarak ayarlayın. Sonuç aşağıdaki gibi olmalı.</div>
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="pun" style="color: #666600;"><?</span><span class="pln" style="color: black;">xml version</span><span class="pun" style="color: #666600;">=</span><span class="str" style="color: #008800;">"1.0"</span><span class="pln" style="color: black;"> encoding</span><span class="pun" style="color: #666600;">=</span><span class="str" style="color: #008800;">"utf-8"</span><span class="pun" style="color: #666600;">?></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><LinearLayout</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">xmlns:android</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"http://schemas.android.com/apk/res/android"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">xmlns:tools</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"http://schemas.android.com/tools"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_width</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"match_parent"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_height</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"match_parent"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:orientation</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"horizontal"</span><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"></LinearLayout></span></pre>
<div>
<br /></div>
<span style="color: #3d85c6;"><span style="font-family: Courier New, Courier, monospace;">LinearLayout</span> <span style="font-family: Courier New, Courier, monospace;">android:orientation</span></span> özelliğinde belirtilen dikey(vertical) veya yatay(horizontal) alt görünümü oluşturmayı sağlayan bir görüntü grubudur (<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">ViewGroup </span>alt sınıfıdır). <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">LinearLayout</span>'ın her elemanı XML dosyasına ekleniş sırası ile ekranda görüntülenir.<br />
<br />
Diğer iki özellik olan,<span style="color: #3d85c6;"> <span style="font-family: Courier New, Courier, monospace;">android:layout_width</span> </span>ve<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"> android:layout_height</span> bütün görünümlerde layout ölçülerini verebilmek için gereklidir.<br />
<br />
Bu uygulamada<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"> LinearLayout </span>ana layout olduğundan mümkün olan bütün ekran alanını kaplaması gerekir. Bu yüzden yukarıda bahsettiğimiz iki özelliğin de değerlerinin <span style="color: #38761d; font-family: Courier New, Courier, monospace;">"match_parrent"</span> olarak ayarlanması gerekir. Bu değer uygulamanın açıldığı ekranın ölçülerinde olmasını sağlar.<br />
<br />
<h2>
Add a Textfield - Bir TextField Ekleme</h2>
<div>
Kullanıcının giriş yapabileceği bir metin alanı oluşturmak için, <LinearLayout> içine <EditText> elemanını eklemeniz gerekir. </div>
<div>
<br /></div>
<div>
Her <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">View </span>nesnesi gibi <span style="color: #3d85c6;"><span style="font-family: Courier New, Courier, monospace;">EditText</span> </span>nesnesinin özelliklerini belirlemek için XML özelliklerinin tanımlanması gereklidir. Aşağıda<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"> <EditText></span> elemanının <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;"><LinearLayout></span> içinde bildirilme şekli gösterilmiştir.</div>
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 1.5; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;"><EditText</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">android:id</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"@+id/edit_message"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_width</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"wrap_content"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_height</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"wrap_content"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:hint</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"@string/edit_message"</span><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;">/></span></pre>
<br />
<h3>
Kodlar Hakkında:</h3>
<div>
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">android:id</span></div>
<div>
<br /></div>
<div>
<span style="font-family: inherit;">Görünüm için benzeri olmayan bir kimlik tanımlar, bu kimlik sayesinde nesneyi okumak ve işlemek için referans elde edilmiş olunur. Bunlardan daha sonra detaylı olarak bahsedilecek. </span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">@ işareti XML den herhangi bir kaynak nesnesine referans verileceği zaman kullanılır. </span>@ işaretinden sonra kaynak tipi gelir (Bu örnek için id kullanıldı), ardından bir eğik çizgi ve daha sonra kaynak ismi (<span style="color: #38761d; font-family: Courier New, Courier, monospace;">edit_message</span>) yazılır. </div>
<div>
<br /></div>
<div>
Kaynak tipinden önce kullanılan artı işaretine sadece bir kaynak id'sini ilk kez tanımladığınızda ihtiyaç duyulur. <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">EditText </span>elemanına referans olması için uygulamayı derlediğiniz zaman SDK araçları projenizin <span style="color: #38761d; font-family: Courier New, Courier, monospace;">gen/R.java</span> dosyasında yeni bir kaynak ID'si oluşturmak için ID ismini kullanır. Bir kez bu yolla kaynak ID'si bildirildiğinde diğer referanslarda artı işareti kullanmaya gerek kalmaz. Artı işareti sadece yeni kaynak ID'si belirlerken gereklidir ve stringler veya layoutlar gibi somut kaynakları belirlerken ihtiyaç olmaz.</div>
<div>
<br /></div>
<div>
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">android:layout_width</span> and <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">android:layout_height</span><br />
<br />
Genişlik ve yükseklik için özel ölçüler kullanmaktansa, <span style="color: #38761d; font-family: Courier New, Courier, monospace;">"wrap_content" </span>değeri elemanın içeriğine göre şekillenmesini sağlayacaktır. Ancak içeriğindeki değer kadar büyük olur. Eğer bunun yerine <span style="color: #38761d; font-family: Courier New, Courier, monospace;">"match_parrent"</span> değeri kullanılmış olsaydı eleman bütün ekranı kaplayacaktı, çünkü <span style="color: #38761d; font-family: Courier New, Courier, monospace;">"match_parrent"</span> değeri EditText elemanının, üst elemanı olan LinearLayout'un ölçülerini almasını sağlayacaktı.<br />
<br />
<span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">android:hint</span><br />
<br />
TextField boş olduğu zaman görüntülenecek olan yazı değeridir. Kod içine gömülü bir string değeri göstermek yerine <span style="color: #38761d; font-family: Courier New, Courier, monospace;">"@string/edit_message"</span> değerini kullanmak özel bir dosyaya kaydedilmiş stringi referans etmektedir. Ancak bu stringi tanımlamadığımızdan ötürü bir derleme hatası alacağız. Bir sonraki bölümde string tanımlamalarının nasıl yapıldığından bahsedilecektir.<br />
<br />
<b>Not: </b>Bu string kaynağının ismine bakıldığında elemanın ismi ile aynı olduğu görülmektedir. Buna rağmen, kaynaklara yapılan referanslar o kaynağın tipi ile yapılmaktadır. Yani aynı isimleri kullanmak çakışmalara sebep olmaz. Çünkü isimler aynı olsa bile veri tipleri farklı olduğu için sorun yaşanmaz.</div>
<h4>
Resource nesnesi hakkında</h4>
Bitmap, layout dosyası veya string gibi her bir resource (kaynak) nesnesi uygulamanın kaynağı ile ilişkili basit benzersiz bir integer isimdir. </div>
<div>
Her resource projenizin<span style="color: #38761d; font-family: Courier New, Courier, monospace;"> gen/R.java</span> dosyasında tanımlanmış olan resource nesnesine karşılık gelir. <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">android:hint</span> özelliği için değer belirleme ihtiyacı gibi bir durum ile karşılaştığınızda, R sınıfını nesnelerinize bakınmak için kullanabilirsiniz. Aynı zamanda <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">android:id </span>özelliğini kullanan bir görünüm ile ilişkilendirilebilir ve başka bir koddaki referans olabilecek keyfi resource ID'leri de oluşturabilirsiniz.</div>
<br />
<h2>
Add String Resources - String Kaynakları Ekleme</h2>
<div>
Bir ara yüze bir metin eklemeniz gerektiğinde, kullanacağınız her stringi bir kaynak olarak tanımlamalısınız. String kaynakları kullanıcı arayüzü metinlerinizi tek bir bölgeden idare etmenizi sağlar. Bu metinlerinizi bulmanızı ve güncellemenizi kolaylaştırır. Stringlerinizi kodlarınızdan ayırma aynı zamanda uygulamanızın farklı dillere çevrilmesini kolaylaştırır.</div>
<div>
<br /></div>
<div>
Varsayılan olarak Android projelerinde <span style="color: #38761d; font-family: Courier New, Courier, monospace;">res/values/strings.xml</span> dosyasının içinde string kaynakları bulunmaktadır. Buraya adı <span style="color: #38761d; font-family: Courier New, Courier, monospace;">"edit_message"</span> ve değeri "Enter a message" olan yeni bir string ekleyin. (Aynı zamanda "Hello world" stringini kaldırabilirsiniz.)</div>
<div>
<br /></div>
<div>
Hali hazırda bu dosyanın içerisine girmişken <span style="color: #6aa84f; font-family: Courier New, Courier, monospace;">"button_send"</span> isminde ve "Send" değerine sahip bir string daha ekleyin. </div>
<div>
<br /></div>
<div>
<span style="color: #38761d; font-family: Courier New, Courier, monospace;">string.xml</span> dosyasının görünümü aşağıdaki gibi olmalıdır:</div>
<div>
</div>
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="pun" style="color: #666600;"><?</span><span class="pln" style="color: black;">xml version</span><span class="pun" style="color: #666600;">=</span><span class="str" style="color: #008800;">"1.0"</span><span class="pln" style="color: black;"> encoding</span><span class="pun" style="color: #666600;">=</span><span class="str" style="color: #008800;">"utf-8"</span><span class="pun" style="color: #666600;">?></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><resources></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><string</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"app_name"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: black;">My First App</span><span class="tag" style="color: #000088;"></string></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><string</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"edit_message"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: black;">Enter a message</span><span class="tag" style="color: #000088;"></string></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><string</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"button_send"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: black;">Send</span><span class="tag" style="color: #000088;"></string></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><string</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"action_settings"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: black;">Settings</span><span class="tag" style="color: #000088;"></string></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><string</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"title_activity_main"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: black;">MainActivity</span><span class="tag" style="color: #000088;"></string></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"></resources></span></pre>
<h2>
Add a Button - Bir Buton Eklemek</h2>
<div>
Şimdi <EditText> elemanından hemen sonra <Button> elemanını ekleyin:</div>
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;"><Button</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_width</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"wrap_content"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_height</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"wrap_content"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:text</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"@string/button_send"</span><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;">/></span></pre>
Görüldüğü gibi yükseklik ve genişlik değeri<span style="color: #38761d; font-family: Courier New, Courier, monospace;"> "wrap_content"</span> olarak ayarlanmış böylece butonun büyüklüğü ancak butonun üzerinde yazan metin kadar olacaktır. Bu butonun android:id özelliğine ihtiyacı yoktur. Bunun sebebi activity kodundan her hangi bir referansı bulunmayacak olmasıdır.<br />
<br />
<h2>
Make the Input Box Fill in the Screen Width - Ekran Genişliğinde Giriş Kutusu Dodurma</h2>
<div>
Şu ana kadar yaptığımız layoutda kullanılan elemanlar içerikleri kadar boyuta sahip oluyordu. Kullanmış olduğumuz EditText ve Button'un görüntülerini aşağıda bulabilirsiniz:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA665oe7dBVCRqtVPPXHxG_Pfj5-A1d14FaUAskwZPRtgETOFK51QpL2Vrb1vdLzXj4IFcHkkOiHt_943FVzGVF6CUWHzJERY7bk5wEQQ_cZHtjWyNvzzaJz6UFDCo-prW-Ikt4rRpDZs/s405/edittext_wrap.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA665oe7dBVCRqtVPPXHxG_Pfj5-A1d14FaUAskwZPRtgETOFK51QpL2Vrb1vdLzXj4IFcHkkOiHt_943FVzGVF6CUWHzJERY7bk5wEQQ_cZHtjWyNvzzaJz6UFDCo-prW-Ikt4rRpDZs/s1600/edittext_wrap.png" /></a></div>
<div>
<br /></div>
<br />
<br />
<br />
<b>Şekil 2.<span style="color: #38761d; font-family: Courier New, Courier, monospace;"> </span></b><span style="color: #38761d; font-family: Courier New, Courier, monospace;">"wrap_content"</span> olarak ayarlanmış <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">EditText</span> ve <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">Button </span>araçları<br />
<br />
Bu kullanım buton için iyi bir kullanım olabilir ancak textfield için iyi değildir. Çünkü kullanıcı çok uzun bir metin yazabilir. Bu yüzden ekranın kullanılmayan alanının genişliği kadar textfield oluşturup bunu sabitlemek hoş bir görünüm sağlayabilir. Bu işlemi yapmak için <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">LinearLayout'un </span>weight özelliği <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">android:layout_weigh</span><span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">t</span> ile kullanılabilir.<br />
<br />
Weight değeri her görünümdeki kalan boşluğun miktarını belirleyen bir sayı değeridir, bu değer yanındaki elemanların kullandığı genişlik miktarına bağlıdır. Bu bir meyve kokteyline benzetilebilir. 2 ölçek şeftali suyu 1 ölçek elma suyu ile karıştırıldığında bu karışımın 3 te 2 sinin şeftali suyu olduğu anlamına gelir. Örneğin bir elemana (Google kaynağında elemanlar için view denilmektedir) 2 ağırlık değeri verildiğinde ve diğer elemana 1 ağırlık değeri verilirse toplam 3 olur. Bu şu anlama gelmektedir; ilk eleman ekranın genişliğinin 2/3 ünün dolduracaktır ikinci eleman ise ekran genişliğinin 1/3 ünü dolduracaktır. Eğer üçüncü bir eleman ekleyip ona da 1 ağırlık değerini verirseniz, bu kez toplam 4 olacaktır ve ilk eleman ekranın 2/4 ünü yani yarısı kadar genişliği, ikincisi 1/4 genişliği ve 3. eleman ise yine 1/4 kadar genişliği kaplayacaktır.<br />
<br />
Bütün elemanlar için varsayılan ağırlık değeri 0 dır, Böylece sadece bir eleman için 0 dan büyük bir değer tanımlarsanız, değerini tanımlamadığınız eleman bu elemandan arta kalan bütün ekran genişliğini alır.<br />
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;"><EditText</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_weight</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"1"</span><span class="pln" style="color: black;">
... </span><span class="tag" style="color: #000088;">/></span></pre>
<div>
<br /></div>
Genişlik değerini belirlediğinizde layout etkinliğini arttırmak için <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">EditText</span> lemanının width değerini (0dp) ye değiştirmelisiniz. Genişliği 0 a ayarlamak layout performansını geliştirecektir. Çünkü yükseklik olarak <span style="color: #38761d; font-family: Courier New, Courier, monospace;">"wrap_content"</span> kullanmak sistemin yüksekliği hesaplamasına ihtiyaç duyar.<br />
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;"><EditText</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_weight</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"1"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_width</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"0dp"</span><span class="pln" style="color: black;">
... </span><span class="tag" style="color: #000088;">/></span></pre>
<div>
<span class="tag" style="color: #000088;"><br /></span></div>
Şekil 3 bütün ağırlığın <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">EditText</span> elemanın verildiği zamanki sonucu görüntülemektedir.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgevz_-S-GH77OH5jA9khQUkGLtZWf8UiZblSR2yFwKVV274Mjwyg0Z-XF6XXB_D8ahZOLISkZK13dbehzintk5QcGNOuKDtAQB2iTtDkjz5-GhRMS2fKQaqoh5w7g2alLV7SNFVFckPKo/s407/edittext_gravity.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgevz_-S-GH77OH5jA9khQUkGLtZWf8UiZblSR2yFwKVV274Mjwyg0Z-XF6XXB_D8ahZOLISkZK13dbehzintk5QcGNOuKDtAQB2iTtDkjz5-GhRMS2fKQaqoh5w7g2alLV7SNFVFckPKo/s1600/edittext_gravity.png" /></a></div>
<br />
<br />
<br />
<br />
<b>Şekil 3. </b>Bütün ağırlığın <span style="color: #3d85c6; font-family: Courier New, Courier, monospace;">EditText</span> elemanına verildiği durum görüntülenmekte.<br />
<br />
Bütün layout en sonunda aşağıdaki gibi görüntülenecektir:<br />
<br />
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="pun" style="color: #666600;"><?</span><span class="pln" style="color: black;">xml version</span><span class="pun" style="color: #666600;">=</span><span class="str" style="color: #008800;">"1.0"</span><span class="pln" style="color: black;"> encoding</span><span class="pun" style="color: #666600;">=</span><span class="str" style="color: #008800;">"utf-8"</span><span class="pun" style="color: #666600;">?></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><LinearLayout</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">xmlns:android</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"http://schemas.android.com/apk/res/android"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">xmlns:tools</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"http://schemas.android.com/tools"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_width</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"match_parent"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_height</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"match_parent"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:orientation</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"horizontal"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><EditText</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">android:id</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"@+id/edit_message"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_weight</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"1"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_width</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"0dp"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_height</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"wrap_content"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:hint</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"@string/edit_message"</span><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;">/></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><Button</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_width</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"wrap_content"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:layout_height</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"wrap_content"</span><span class="pln" style="color: black;">
</span><span class="atn" style="color: #882288;">android:text</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"@string/button_send"</span><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;">/></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"></LinearLayout></span></pre>
<div>
Bu layout, proje oluştururken varsayılan SDK araçları tarafından oluşturulan Activity sınıfına uygulanır. Bunu projenize ekleyip projenizi çalıştırarak sonuçları Android cihazınızda veya Emulator de görüntüleyebilirsiniz.</div>
Anonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.com0tag:blogger.com,1999:blog-7223671996023768700.post-12123471156990254902013-06-26T06:11:00.002-07:002013-07-02T07:16:28.722-07:00Running Your App - Android Uygulamanızı ÇalıştırmaEğer bir Android uygulaması oluşturmak için bir önceki yazımızı okuduysanız, yaptığınız uygulamanın hazır bir kolayca çalıştırabileceğinizi bir "Hello World" uygulamasının kodlarını barındırdığını farketmişsinizdir.<br />
Bir uygulamayı nasıl çalıştırdığınız iki şeye bağlıdır: Ya gerçek bir Android cihaz kullanırsınız ya da uygulamayı Eclipse üzerinde çalıştırırsınız. Bu yazımızda uygulamanızı gerçek bir cihaz üzerinde ve emülatör üzerinde nasıl çalıtıracağınız anlatılacaktır.<br />
<br />
<a name='more'></a><br />
Uygulamanızı çalıştırmadan önce, Android projenizdeki bazı dosya ve klasörlere dikkat çekilmesi gerekir:<br />
<br />
<span style="background-color: #f9f9f9; color: #006600; font-family: monospace; font-size: 13px; line-height: 14px;">AndroidManifest.xml</span><br />
<br />
Manifest dosyası uygulamanın temel karakteristiğini barındırır ve uygulamanın bileşenleri için bunları tanımlar. Takip eden yazılarımızda bu dosya içerisinde yapılan çeşitli tanımlamalardan bahsedeceğiz.<br />
Manifest dosyanızda bulunan en önemli elemanlardan biri <code style="font-size: 13px; line-height: 14px;"><span style="color: #3d85c6;"><uses-sdk></span></code><span style="background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px;"> </span>elemanıdır. Bu eleman <code style="font-size: 13px; line-height: 14px;"><span style="color: #3d85c6;">android:minSdkVersion </span></code><code style="font-size: 13px; line-height: 14px;"><span style="color: inherit; font-family: 'Times New Roman'; font-size: small; line-height: normal;">ve </span><span style="color: #3d85c6;">android:targetSdkVersion </span></code>özelliklerini kullanan farklı Android versiyonları ile uygulamanızın uyumluluğunu bildirir. İlk uygulamanız için bu dosya aşağıdaki biçimde görünmelidir.<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 1em; margin-top: 10px; overflow: auto; padding: 1em;"><span class="tag" style="color: #000088;"><manifest</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">xmlns:android</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"http://schemas.android.com/apk/res/android"</span><span class="pln" style="color: black;"> ... </span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: black;">
</span><span class="tag" style="color: #000088;"><uses-sdk</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">android:minSdkVersion</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"8"</span><span class="pln" style="color: black;"> </span><span class="atn" style="color: #882288;">android:targetSdkVersion</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"17"</span><span class="pln" style="color: black;"> </span><span class="tag" style="color: #000088;">/></span><span class="pln" style="color: black;">
...</span><span class="tag" style="color: #000088;"></manifest></span></pre>
<div style="color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 15px; margin-top: 10px;">
<span style="background-color: white;"><span style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;">Daima </span><span style="color: #3d85c6; font-family: monospace; font-size: 13px; line-height: 14px;">android:targetSdkVersion </span><span style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;">yarlarını mümkün olan en yüksek seviyede tutmalısınız ve uygulamanızı uygun platform versiyonlarında test etmelisiniz.</span></span></div>
<div style="color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 15px; margin-top: 10px;">
<span style="background-color: #f9f9f9; color: #006600; font-family: monospace; font-size: 13px; line-height: 14px;">src/</span></div>
<div style="margin-bottom: 15px; margin-top: 10px;">
Uygulamanıza ait ana kaynak dosyaları barındıran klasör. Varsayılan olarak uygulama çalıştığında çalıştırılan ve uygulama ikonunu kullanan bir <code style="background-color: #f9f9f9; color: #006600; font-size: 13px; line-height: 14px;">Activity</code><span style="background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px;"> </span>sınıfını barındırır.</div>
<div style="margin-bottom: 15px; margin-top: 10px;">
<span style="background-color: #f9f9f9; color: #006600; font-family: monospace; font-size: 13px; line-height: 14px;">res/</span></div>
<div style="margin-bottom: 15px; margin-top: 10px;">
Uygulama kaynakları için bir çok alt klasörü barındırır. Bunları şöyle sıralayabiliriz:</div>
<div style="margin-bottom: 15px; margin-top: 10px;">
<span style="background-color: #f9f9f9; color: #006600; font-family: monospace; font-size: 13px; line-height: 14px;">res/drawable-hdpi/</span></div>
<div style="margin-bottom: 15px; margin-top: 10px;">
Yüksek çözünürlüklü cihazlar için tasarlanmış bitmap dosyaları gibi çizilebilir nesneleri barındıran klasördür.</div>
<div style="margin-bottom: 15px; margin-top: 10px;">
<span style="background-color: #f9f9f9; color: #006600; font-family: monospace; font-size: 13px; line-height: 14px;">res/layout/</span></div>
<div style="margin-bottom: 15px; margin-top: 10px;">
Uygulamanın kullanıcı arayüzünü tanımlayan dosyaları barındıran klasördür.</div>
<div style="margin-bottom: 15px; margin-top: 10px;">
<span style="background-color: #f9f9f9; color: #006600; font-family: monospace; font-size: 13px; line-height: 14px;">res/values/</span></div>
<div style="margin-bottom: 15px; margin-top: 10px;">
String ve renk tanımlamaları gibi kaynakları içeren çeşitli XML dosyaları için kullanılan bir klasördür.</div>
<div style="margin-bottom: 15px; margin-top: 10px;">
Varsayılan Android uygulamasını derleyip çalıştırdığınızda, varsayılan Activity sınıfı başlar ve Merhaba dünya yazan bir ekran görüntüler. Aslında bu çok sıradışı bir olay değildir burada önemli olan şey uygulama geliştirmeye başlamadan önce bir uygulamanın tam olarak nasıl çalıştığını anlayabilmenizdir.<br />
<br /></div>
<div style="margin-bottom: 15px; margin-top: 10px;">
<h2>
Run on a Real Device - Gerçek bir cihazda çalıştırma</h2>
<div>
Eğer Android destekleyen bir cihazınız varsa uygulamanızı çalıştırmak için izlemeniz gereken yol aşağıdaki gibi olmalıdır.</div>
<div>
<ol>
<li>Cihazınızı USB kablo yardımı ile bilgisayarınıza bağlayın.</li>
<li>Cihazınızda USB debugging iznini verin.</li>
<ul>
<li>Android 3.2 ve daha eski sürümlerini kullanan cihazlarda <b>Ayarlar>Uygulamalar>Geliştirici</b>nin altında bu ayarı bulabilirsiniz.</li>
<li>Android 4.0 ve daha yeni sürümlerini kullanan cihazlarda <b>Ayarlar>Geliştirici seçenekleri </b>menüsü altında bu ayarı bulabilirsiniz.</li>
<ul>
<li><b>Not:</b> Android 4.2 ve daha yeni versiyonlu cihazlarda geliştirici seçenekleri gizlenmiştir. Bunu açmak için <b>Ayarlar>Cihaz hakkında </b>menüsü altında bulunan <b>Derleme numarası</b>nı yedi kez tıklayarak <b>Geliştirici seçeneklerine</b> ulaşabilirsiniz.</li>
</ul>
</ul>
</ol>
<div>
Eclipse üzerinden uygulamanın çalıştırabilmesi için:</div>
</div>
<div>
<ol>
<li>Proje dosyanızı açın ve araç çubuğundan <b>Run</b> butonunu tıklayın.</li>
<li><b>Run as </b>alt menüsü açıldığında,<b> Android Application' ı </b>seçin ve OK' e basın.</li>
</ol>
<div>
Eclipse uygulamayı cihazınıza yükleyip çalıştıracaktır.</div>
</div>
</div>
<div style="margin-bottom: 15px; margin-top: 10px;">
<h3>
Run on the Emulator - Gerçek bir cihazda çalıştırma</h3>
<div style="color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px;">
Uygulamanızı bir Android sanal makinesinde çalıştırmak isterseniz bunun için yapmanız gereken ilk şey geçerli bir <b>AVD (Android Virtual Device)</b> oluşturmak olmalıdır. Bir AVD farklı modellerdeki cihazları emülatör ortamında kullanmanızı sağlayan sanal cihazdır.</div>
<div style="color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px;">
<br /></div>
<div style="color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px;">
Bir AVD oluşturmak için:</div>
<div>
<ol>
<li><span style="color: #222222; font-family: Roboto, sans-serif;"><span style="font-size: 14px; line-height: 19px;">Android Virtual Device Manager'i çalıştırın:</span></span></li>
<ul>
<li><span style="color: #222222; font-family: Roboto, sans-serif;"><span style="font-size: 14px; line-height: 19px;">Eclipse'de araç çubuğundan <b>Android Virtual Device Manager</b> butonunu tıklayın.</span></span></li>
</ul>
<li><span style="color: #222222; font-family: Roboto, sans-serif;"><span style="font-size: 14px; line-height: 19px;">Açılan pencerede <b>new </b>butonunu tıklayın.</span></span></li>
<li><span style="color: #222222; font-family: Roboto, sans-serif;"><span style="font-size: 14px; line-height: 19px;">AVD için gerekli ayrıntıları doldurun. Bir isim verin, bir platform hedefi tanımlayın, bir SD kart boyutu girin ve bir skin ayarlayın.(Varsayılan HVGA)</span></span></li>
<li><span style="color: #222222; font-family: Roboto, sans-serif;"><span style="font-size: 14px; line-height: 19px;"><b>Create AVD</b>' yi tıklayın.</span></span></li>
<li>Android Virtual Device Manager penceresinden yeni bir AVD seçin (new AVD) ve <b>Start</b>'a basın.</li>
<li>Emülatör başlatıldıktan sonra ekran kilidini açın.</li>
</ol>
<div>
Eclipse üzerinden uygulamanızı çalıştırmak için:</div>
</div>
<div>
<ol>
<li>Projelerinizden birini açın ve araç çubuğundan <b>Run</b> butonuna basın.</li>
<li><b>Run as </b>bölümünde <b>Android Application'</b>ı seçin ve <b>OK'</b>e basın.</li>
</ol>
<div>
Eclipse uygulamanızı sanal Android cihazınıza yükleyip çalıştıracaktır.</div>
</div>
</div>
Anonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.com0tag:blogger.com,1999:blog-7223671996023768700.post-70456242139265740002013-06-26T03:14:00.000-07:002013-07-02T07:16:42.751-07:00Creating an Android Project - Yeni Bir Android Projesi Oluşturma<br />
<div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
</div>
<br />
Bir Android projesi Android uygulaması için kaynak kodları oluşturan dosyaları içermektedir. Android SDK araçları varsayılan proje klasör ve dosyaları ile yeni bir Android projesine başlamayı kolaylaştırır.
<br />
Bu yazımızda nasıl yeni bir proje oluşturacağı anlatılacaktır.<br />
<br />
<a name='more'></a><br />
<b>Not:</b> Bu işlemleri yapabilmek için Android SDK ve Eclipse ile uygulama yapıyorsanız ADT Plugininin kurulu olması gerekmektedir.<br />
<br />
<b><u><span style="font-size: large;">Create A Project With Eclipse - Eclipse İle Yeni Bir Proje Oluşturmak</span></u></b><br />
<br />
<ol>
<li>Toolbar dan <b>New</b>'i tıklayın</li>
<li>Pencere açıldığında, <b>Android </b>klasörünü açın, <b>Android Application Project</b>'i seçin ve <b>Next</b>'e tıklayın.</li>
<li>Çıkan formu doldurun:</li>
<div>
<ul>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivf9uz6rXzY8xWg123WJKzcFVvWhfZzQsS9YVVb5gblkg9Fqlqgn8Dst0Fm2sbm17faLF8uzbxb6-lyENNKUXxyVj2G7tZLqIZTU5XO3dbR_FLyBlAquaPDjYOVf3sZa9ori4k2XJLRdc/s1600/adt-firstapp-setup.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivf9uz6rXzY8xWg123WJKzcFVvWhfZzQsS9YVVb5gblkg9Fqlqgn8Dst0Fm2sbm17faLF8uzbxb6-lyENNKUXxyVj2G7tZLqIZTU5XO3dbR_FLyBlAquaPDjYOVf3sZa9ori4k2XJLRdc/s320/adt-firstapp-setup.png" width="320" /></a>
<li><b>Application Name </b>kullanıcılar tarafından görüntülencek uygulama ismi bu proje için "My First App" kullanalım</li>
<li><b>Project Name </b>proje klasörünüzün ismidir ve Eclipse içinde bu isim görüntülenir.</li>
<li><b>Package Name aynı </b>java programlama yaparkenki gibi yazdığınız programı bölümlere ayırmak için kullanılan paket yapısıdır. Paket isminiz benzersiz olmalıdır ve paket isimleri yazılımcı hakkında bilgi verir şekilde hazırlanır. com.tr.alyakayazilim.alper.test bir paket ismidir. Dikkat edilecek olursa com bir ticari kuruluş olduğumu tr Türkiy'de olduğumuzu, alyakayazılım firmamızın adını ve test bu paketin içinde çalışabilir dosyalar bulunduğunu anlatmaktadır.</li>
<li><b>Minimum Required SDK</b> API seviyesini gösteren uygulamanızın sağlayacağı en düşük Android versiyonunu gösterir. Mümkün olan en fazla cihazı destekleyebilmek için , uygulamanızın yazılabileceği en düşük SDK yı seçmeniz gerekir. Burada varsayılan değer seçili bırakılmıştır.</li>
<li><b>Target SDK </b>uygulamanızla test edilen en yüksek Android versiyonunu gösterir.</li>
<li><b>Compile With </b>uygulamanızı derleyeceğiniz platform versiyonudur. Varsayılan olarak SDK nızdaki an son Android versiyonunu gösterir. </li>
<li><b>Theme </b>Android UI (ara yüz) stilini uygulamanıza uygular. Burayı olduğu gibi bırakabilirsiniz.</li>
</ul>
<br />
<br />
<li>Sonraki ekran proje konfigürasyon ekranıdır. Burayı varsayılan şekli ile bırakıp <b>next</b>' i tıklayın.</li>
<li>Sonraki ekran projeniz için bir çalıştırma ikonu oluşturmanıza yardımcı olur.</li>
<li>Şimdi bir aktivite şablonu seçebilirsiniz. Bu proje için <b>BlankActivity</b>'yi seçin ve <b>Next</b>'i tıklayın.</li>
<li>Her şeyi olduğu gibi bırakın ve<b> Finish</b>'i tıklayın.</li>
</div>
</ol>
Android projeniz bazı varsayılan dosyalar ile ayarlandı ve şu an bir uygulama yazmak için hazır. Sonraki yazımızda görüşmek üzere.Anonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.com0tag:blogger.com,1999:blog-7223671996023768700.post-11554441298491336902013-06-26T01:17:00.001-07:002013-07-02T07:23:18.092-07:00Get the android SDK - Android SDK'sını indirmeAndroid SDK'sı Android için yapılan uygulamaların build,test ve debug edilmesi için size API kütüphaneleri ve geliştirici araçlarını sağlar.<br />
Eğer Android ortamı için yazılım geliştirme konusunda çok yeniyseniz uygulama geliştirme için Google adt bundle yüklemeyi şiddetle tavsiye ediyor.<br />
Bu paket içerisinde Android uygulama geliştirmeyi kolaylaştırmak için ihtiyaç duyulan Android SDK bileşenleri ve ADT (Android Developer Tools)eklenmiş Eclipse idesi bulunmakta.
Sadece ADT Bundle yüklemek ile Android uygulamaları geliştirmek için ihtiyaç duyulan her şeye sahip olabilirsiniz:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://developer.android.com/sdk/index.html#download" rel="nofollow" target="_blank"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMGBYGfW6rJ-S7be1YSn55R45Aupa5KbwFLD6fkgaqJ2WUROhgFABGi1SLtIvrWtGNnGisOo2J68SwbkSO_iuyKtH-9zB4a2XNq9V0-ygqNNEMHuG4c4G3Z8rwkeY1nvPPc4dJR9aVN5U/s1600/download.png" /></a></div>
<ul>
<li>Eclipse + ADT Plugin</li>
<li>Android SDK araçları</li>
<li>Android Platform araçları</li>
<li>En güncel Android platformu</li>
<li>Emulator için en güncel Android sistem imajı</li>
</ul>
Anonymoushttp://www.blogger.com/profile/10265854393379540299noreply@blogger.com0