25 Nisan 2017 Salı

Android Splash Screen Yapımı

Merhaba Arkadaşlar ,
Bu yazımda, Splash Screen ekranlarından bahsedeceğim. Instagram,twitter gibi hemen hemen herkesin bildiği ve kullandığı android uygulamaları ilk açıldıklarında logolarının göründüğü bir ekran karşımıza gelir. Splash ekranın Türkçe karşılığı açılış ekranı olarak geçmektedir.Açılış ekranları ekranda 2-3 saniye kaldıktan sonra oturum açma ekranına ya da ana ekrana (Yani Activity)ye geçiş yaparlar.Açılış ekranının ekranda kalış süresini istediğiniz gibi ayarlayabilirsiniz.Fakat açılış ekranının çok uzun süre ekranda kalması kullanıcıyı uygulamadan soğutabilir.Ya da diğer durumda ,kullanıcının ekranı göreceği yeterli süre ayarlanmazsa da kullanışsız olabilir.Ben açılış ekranlarının  uygulamada gösterilme süresini genelde 3 saniye olarak ayarlamayı tercih etmekteyim. 
Şimdi Splash Screen'in nasıl oluşturulduğunu görelim:
Öncelikle yeni bir proje oluşturalım.Yeni proje oluşturduğumuzda MainActivity.java ve activity_mail.xml oluşturulmuş oldu. Şimdi Splash ekranımızı oluşturacağımız yeni bir Aktivite oluşturmamız gerekmektedir.Bunun için aşağıdaki şekildeki adımları izleyelim ve Empty Activity oluşturalım ben bu aktivitenin ismini SplashScreenActivity olarak verdim.


Splash ekranda kullanacağımız resmi aşağıdaki şekildeki gibi drawable klasörüne yükleyeceğiz.Ama burada önemli bir nokta var. Android telefonların ve tabletlerin ekranları değişik boyutta olduğu için,resmin her cihazda aynı  şekilde gözükmesi konusunda sıkıntı yaşayabiliriz. Bunun  için bir adet XHDPI şeklinde resmi drawable  klasörüne atmamız yeterlidir.
XHDPI :
  •        Portrait:720px1280px
  •        Landscape :1280x720px



Splash Screen ekranımızın tasarım kısmını yaptığımız activity_splash_screen.xml dosyasının kodları aşağıdaki  gibi olacaktır.

 activity_splash_screen.xml 

activity_main.xml de  ise MainActivty'de ise bir textView ekledik.
activity_main.xml
Tasarım kısmını tamamladıktan sonra java dosyalarımıza geçelim.
SplashScreenActivity.java kodları aşağıdaki gibi olacaktır:
MainActivity.java 'da herhangi bir değişiklik yapmadık.
Şimdi önemli bir noktaya geldik AndroidManifest.xml dosyasında değişiklik yapmamız gerekiyor.Çünkü Splash ekranımız ilk açılan ekran olmalıdır.Şu anki AndroidManifest.xml dosyamıza göre uygulama çalıştığında ilk olarak MainActivity çalışacaktır.
AndroidManifest.xml 'de  aşağıdaki değişiklikler yapılmalıdır.

Bu yaptıklarımızdan sonra açılış ekranımız(Splash Screen) hazır durumdadır.
Diğer yazımda görüşmek üzere...

24 Nisan 2017 Pazartesi

Bir Aktiviteden Diğer Aktiviteye Veri Aktarımı Yapmak

Merhaba Arkadaşlar,
Bugün Android sistemin en önemli bileşenlerinden olan Activity'ler arası veri alışverişinden bahsedeceğim.Bu veri alışverişini sağlamak için tabi ki intentlerden yararlanacağız.
Öncelikle yeni bir proje oluşturalım.Bu yazıya yeni proje oluşturma adımlarını bildiğinizi varsayarak devam edeceğim
Bu örnekte ilk  aktivitede,
2 adet editText,
1 adet buton oluşturacağız.Bu edittextler ile kullanıcıdan kullanıcı adı ve sifre isteyeceğiz.Buton ile de diğer aktiviteye geçiş ve veri alışverişini gerçekleştireceğiz.
Layout klasörünün altındaki activity_main.xml dosyasında aşağıdaki değişikleri yapacağız:


Böylece ilk aktivitemizin tasarımını hazırlamış olduk.MainActivity.java kodlarını 
yazmadan önce ikinci aktivitemizi oluşturalım.Bunun için aşağıdaki adımları izleyip yeni bir aktivite oluşturalım.


activity_second.xml dosyasında diğer aktiviteden gelecek kullanıcı adı ve şifre bilgilerini gösterecek iki tane textView oluşturacağız.
activity_second.xml dosyasında aşağıdaki değişiklikler yapılacak:İki adet textView oluşturalacak




Sıra geldi Java dosyalarına Aktivitelerin java dosyalarında xml dosyasındaki elemanların tanımını ve hangi işlemleri gerçekletireceğini belirtiriz.

MainActivity.java kodlarımız aşağıdaki gibi olacaktır:


SecondActivity.java ise MainActivity.java dosyasında Intent ile gönderdiğimiz verileri alıyor ve ekranda gösteriyor.
SecondActivity.java'da kullanılan kodlar aşağıdaki gibidir:

Sonuçta proje emülatörde çalıştırıldığında aşağıdaki görüntüler elde edilecektir:


 Bugün activity ve intent kavramlarını basit bir örnekle kullanmış ve bir giriş yapmış olduk .

18 Nisan 2017 Salı

İntent ve intent Filter

Arkadaşlar merhaba ,bu yazımda sizlere intent ve intent filter kavramlarından bahsedeceğim.
Android de uygulama bileşenleri diğer android uygulamaları ile etkileşime geçebilir.Bu intent nesneleri ile mümkündür .Android uygulamamızda aktiviteler arası geçiş,yeni aktivite başlatma,yeni bir servis tetiklemek istediğimizde Intent nesnesini kullanırız.Bir aktivite başka bir uygulamadaki aktiviteyi başlatabilir.Örneğin uygulamamıza bir fotoğraf yüklemek için galeriden fotoğraf seçme aktivitesi açılır.Bu şekilde android telefonun sistem özelliklerini uygulamada kullanabildiğimiz gibi telefonda yüklü 3.parti uygulamaların özelliklerini de kendi uygulamamızda kullanabiliriz.Yeni bir aktivite başlatmak için startActivity(intent) methodu kullanılır.Bu method Context nesnesinde tanımlıdır.Aynı uygulama içinde bir Activity başka bir aktiviteyi başlatıyorsa ,başlatılan aktivite alt aktivite (sub -activity )olarak adlandırılır.
 Yeni bir aktivite başlatmak için aşağıdaki kodu kullanmalı ve başlatacağımız yeni aktiviteyi de oluşturmalıyız.Bunun için 
  Geçiş yapılacak aktivite oluşturulur. Kodda hangi isimle çağıracaksak o isim oluşturduğumuz aktivitenin ismi ile aynı olmalıdır.


Intent i = new Intent(getBaseContext(), YeniActivity.class);

startActivity(i);
finish();// Eğer sayfa açıldıktan sonra bu sayfaya tekrar Back butonu ile dönülmesini istemiyorsak finish() metodu ile Activity'i bitirebiliriz.
Aktiviteler arası veri alışverişi Bundle ile sağlanır.
İntent ile servis başlatmak için startService(Intent ) methodu çağrılır.
İki çeşit Intent vardır:
1-Explicit(açık) 
2 implicit(dolaylı)
Explicit intentler: Eğer uygulamada  kullanılmak istenen bileşen açıkça tanımlanmış bir intent ise explicit bir intenttir.Explicit intentlerde Android Sistemin hangi bileşeni çağıracağını açıkça tanımlanması gerekir. Explicit intentler uygulama içinde java sınıfları olarak, uygulamanın geliştiricisi tarafından kontrol edilir. Aşağıda bir explicit intentin nasıl olabileceği gösterilmiştir:
Intent i = new Intent(this, ActivityTwo.class);
i.putExtra("Value1", "This value one for ActivityTwo ");
i.putExtra("Value2", "This value two ActivityTwo");
Implicit Intentler: İmplicit intentler gerçekleşmesi istenen eylemi belirtir. İmplicit intent android sisteme gönderildiğinde ,sistem öncelikle belirtilen eylemi gerçekleştirmek için uygun tipteki bütün komponentleri arar.Eğer uygun olan sadece bir tane varsa Android sistem otomatik olarak bu komponenti başlatır.Ama Android sistem tarafından  belirtilen eylem için kullanılacak birden fazla komponent tanımlanmış ise, kullanıcının istediği eylemi gerçekleştirmek için kullanmak istediği komponenti seçmesi için karşısına bir dialog penceresi gelir. Aşağıdaki örnek kodda Android sistemden bir web sayfasını göstermesi istenmektedir.
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(i);
Burada karşımıza önemli bir sorun çıkıyor.Bu belirlenen intentleri gerçekleştirmek için android sistemi,gönderilen intent için hangi komponentin uygun olduğunu nasıl tespit edecek işte burada devreye intent filter girmektedir. Komponentler belirli bir eylem için kayıt edilebilirler.Ayrıca intent filter için ,belirli implicit intentin hangi aktiviteye ait olduğunu da belirtmek gerekir.Bu Android komponentleri static olarak AndroidManifest.xml dosyasına kayıt edilebilir.
Aşağıda AndroidManifest.xml dosyasında tanımlanmış kullanıcının çeşitli tiplerde içerik gönderebilmesi için kullanılacak komponent tanımlanmıştır.

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");
// Verify that the intent will resolve to an activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}
Bir sonraki yazımda Aktivite ve İntent kavramlarını içeren bir örneği uygulamalı olarak anlatacağım.Görüşmek üzere..

17 Nisan 2017 Pazartesi

Activity Yaşam Döngüsü

Herkese merhaba , daha önceki yazımda kısaca uygulamanın en önemli bileşenlerinden olan Activity'i tanıtmıştım.Şimdi detaylı bir şekilde Activity sınıfını ve Activity yaşam döngüsünü açıklamak istiyorum.
Uygulamamızda gördüğümüz her ekran bir activity'i temsil etmektedir. Activity manager ise telefonun çalışmasını iyileştirmeyi, kaynak israfını önlemeyi sağlar.Çünkü bildiğimiz gibi telefonların işlemcisi bilgisayarların işlemcileri gibi gelişmiş değildir. Activity Manager telefonun işletim sisteminin kaynak yetersizliği çektiği durumlarda  ,herhangi bir uyarı yapmaksızın devreye girer.Uygulamayı kapatır(kill)yada kısa kısa bir süreliğine ara verebilir(stop,pause)Bu tür durumlara örnek olarak uygulama çalışır durumdayken ,telefona gelen bir arama ile uygulamanın yarıda kesilmesini verebiliriz.Arama sonrasında kullanıcının uygulamaya kaldığı yerden devam edebilmesi Activity yaşam döngüsünü ve metotlarını bilmemiz gerekiyor.Ayrıca kullanıcıların çok kullandığı bir özellik olan  back tuşuna basıp çıktıktan sonra kaldığı yerden devam edebilmesini de yaşam döngüsü metodlarıyla gerçekleştirilir.
  • onCreate: Activity ilk oluşturulduğunda çağrılır. Activity herhangi bir nedenden ötürü yok edilmezse (bellek ihtiyacı ya da finish metodu) bir daha çalıştırılmaz.
  • onStart: onCreate metodu çalıştırılıp ekranda  görsel öğeler gösterildikten sonra çağrılır.
  • onResume: Activity herhangi bir sebepten dolayı durdurulduysa (başka bir ekrana geçiş) tekrar ekrana geldiğinde bu metot harekete geçer. Activity çalıştırılmadan önce harekete geçen son metottur. Bu metottan sonra belirlenen koda göre Activity yaşamına başlar.
  • onPause: Activity bir sebepten dolayı arka plana atılırsa harekete geçer. Bu Back tuşuna basılmasından ya da sistemin bellek ihtiyacından kaynaklanabilir. Bu metot içerisinde anlık bilgilerin kaydedilmesi önerilir. onPause işlemi hızlı çalışmak zorundadır, çünkü buradaki işlem bitmeden bir sonraki Activity harekete geçmez.
  • onStop: Activity arka plana atıldığı anda işleme girer. Bu noktada iki seçenek vardır; ya kullanıcı yeni ekrandaki işini bitirip geri gelir ya da Activity tamamen kapatılır. Kullanıcı geri geldiği takdirde onRestart metoduna geçilir ve döngü onStart metodundan tekrar başlar. Eğer kullanıcı geri gelmeyecekse onDestroy metodu çalıştırılır.
  • onDestroy: Activity'e ait bütün kaynaklar yok edilir. Activity bu noktada yaşam döngüsünü tamamlamıştır.
onCreate methodu ile ekranlarımızın tasarımlarını içeren layout dosyasındaki ilgili ekranımıza ait tasarımımızı yükleriz.Ayrıca uygulama ilk açıldığında ne gibi özellikler olacağını da bu metotla belirleriz. Android Studio'da yeni bir proje oluşturduğumuzda ya da yeni bir activity oluşturduğumuzda onCreate metodu otomatik olarak eklenmektedir.


16 Nisan 2017 Pazar

Androidde Temel Uygulama Bileşenleri

Android Programlamaya giriş yapmadan önce bir android uygulamanın ana bileşenlerini yakından tanıyalım.
 4 farklı tipte uygulama  bileşeni vardır.Bunlar şunlardır:
1 Activities
2-Services
3-Broadcast Receivers
4-Content Providers
Her bir bileşen farklı bir amaç için kullanılır. Her bir tip için uygulama bileşenlerinin nasıl yaratılıp ,nasıl yok edileceğine dair farklı bir yaşam döngüsü vardır.
 İlk olarak Activity ile başlamak istiyorum.
1-Activity
Activity uygulamanın kullanıcı ile etkileşime geçtiği bir ara yüzdür. Uygulamada birçok activity olabilir.Uygulamalar bir activity ile açılır.Activity'ler diğer uygulama bileşenleriyle uyumlu bir şekilde çalışmaktadır.Activity için günlük yaşamda çok  kullandığımız e-mail örneğini verecek olursak ,Uygulama ilk olarak e-mail gelen kutısu ekranı ile açılır.Bu Activity başka bir activity'yi çalıştırır .Örneğin e-mail yazılıcak ekranın olduğu  activity vb.Genellikle uygulama içindeki activityler birbirleri arsındaki bağımlılık düşüktür.Activity ler sıklıkla başka uygulamadaki activityleri çalıştırır.Buna örnek olarak tarayıcı uygulaması ile sosyal hesaplarımızda fotoğraf paylaşabilmemiz verilebilir.
Uygulamada kullanılan activitylerin  bilgilerini manifest dosyasında yazılması gerekir.Yeri gelmişken kısaca manifest dosyasından bahsetmek isiiyorum.Manifest dosyası uygulamamız için gerekli izinlerin tanımlandığı ve uygulamamızdaki activitylerin bilgilerinin belirtildiği bir xml dosyadır.Eğer manifest dosyasında uygulama için gerekli izinler(internet,kamera vb.) ya da activityler deklare edilmezse uygulama çalışmayacaktır.