ekle etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ekle etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

15 Haziran 2012 Cuma

Android Programlama XVI - Sekme Kullanımı

Herkese merhabalar!

Öncelikle uzun süren ara için sizlerden özür diliyorum. Okuldaki yoğunluk nedeniyle pek ilgi gösteremedim Androidce'ye. Şu sıralar biraz boş vaktim var ve değerlendirmek istiyorum.

Bu yazımda sizlere uygulamalarımızda sekmeleri nasıl kullanabiliriz onu anlatmaya çalışacağım. Sekmeleri kullanarak uygulamamız içinde çeşitli bileşenleri ayrıştırabilir, daha düzenli arayüzler hazırlayabiliriz. Şimdi bununla ilgili bir örnek yapalım.

SekmeOgreniyorum isimli bir Android projesi oluşturarak başlayalım. Projeyi oluştururken belirlediğim AnaEtkinlik isimli etkinliğin içini boşalttıktan sonra aşağıdaki gibi bir hale geldi projemiz.

Şimdi ana layout dosyamız içine sekmelerimizi içine yerleştireceğimiz TabHost bileşenini ekleyeceğiz. Aşağıda görüldüğü gibi Composite kategorisi altından ekleyebilirsiniz.
Şimdi XML görünümüne geçip TabHost içindeki FrameLayoutun içini boşaltalım çünkü biz buraya istediğimiz sekmeleri etkinliğimizin Java kodları içinden belirleyip ekleyeceğiz. Bu işlemden sonra XML görünümü aşağıdaki gibi olmalı.

Ana layout dosyamızı hazırladık.

Şimdi sıra ekleyeceğimiz sekmelerin tasarımlarına geldi. Şimdi örnek olması açısından içlerinde sadece bir tane TextView olan ve hangi sekmedeysek onunla ilgili bilgi veren layout dosyaları tasarlayalım.

Aşağıdaki gibi görünen 3 tane layout dosyası oluşturalım.

Şimdi oluşturacağımız sekmeler için simgeler oluşturma zamanı. Ben her ortamda severek kullandığım gülücük paketinden resimler seçtim. (Chromakode'a teşekkürler.) Sekmelerimiz için seçtiğimiz resimleri projemizin res dizinine drawable isimli bir dizin altına atıyoruz.
Şimdi bu simgeleri yönetecek XML dosyalarına ihtiyacımız var. İçinde simgelerimizi barındıran drawable dizinine sağ tıklayıp New menüsü altından Android XML File seçeneğini buluyoruz. (Menü içinde yoksa Other seçeneğini seçip arayabilirsiniz.)
İlk sekmemizin simgesini yönetecek XML dosyamıza adını veriyoruz ve Root Element kısmından selectorı seçip Finish diyoruz.
Bu XML dosyası ilk sekmemiz seçili olduğunda ve olmadığında o sekmenin simgesini belirlememizi sağlayacak. Oluşturduğumuz dosyanın içini aşağıdaki gibi dolduruyoruz.

Şimdi aynı işi diğer iki sekmenin simgeleri için de yapıyoruz ve istediğimiz simgeleri belirliyoruz.

Sekmelerimiz oluşturmadan önce son adım olarak daha önce tasarımlarını yaptığımız etkinlikleri oluşturalım. Bu etkinlikler her bir sekmenin altında görüntülenecek olan, sekmenin içeriğini oluşturan etkinlikler olacaklar. Bunları ana etkinliğimizi kopyalayarak hızlıca oluşturabiliriz. (Her etkinliğin kullandığı layout'u değiştirmeyi unutmayın.) 3 etkinliği de oluşturduktan sonra projemiz aşağıda görüldüğü gibi bir hale geldi.


Artık sekmelerimizi oluşturabiliriz.

Ana etkinliğimizi açalım ve kodlamaya başlayalım.

İlk iş olarak normal bir etkinlik olan bu ana etkinliğimizin sekme içeren bir etkinlik olduğunu belirtmemiz gerekiyor.

Bunun için sınıf tanımlamasının yapıldığı yerdeki extends Activity kısmını extends TabActivity şeklinde değiştiriyoruz. Aşağıdaki gibi hata almanız normal. Bunu daha önce anlattım mı hatırlayamıyorum, o yüzden değineyim.

Burada Eclipse yazdığımız TabActivity sınıfının hangi pakette yer aldığını bulamadığı için hata veriyor. Bunu kendiliğinden düzeltmek için Ctrl + Shift + O kısayolunu kullanarak kullanılan sınıflarla ilgili paketleri projemize ekletiyoruz.

Gördüğünüz gibi hata giderildi ve artık etkinliğimiz bir Activty değil TabActivity. Şimdi sekmelerimizi oluşturabiliriz.

İlk olarak layout dosyamıza eklediğimiz TabHost nesnesini oluşturmak ve tanımlamak. Aşağıdaki kodları yazmamız yeterli.

Şimdi sekmelerimizi oluştururken kullanacağımız bir nesne daha oluşturacağız.
Şimdi de her sekmemiz için oluşturduğumuz etkinlikleri açmamıza yarayacak Intent nesnesi oluşturuyoruz.

Sıra sekmeleri oluşturup alanımıza eklemeye geldi. Bunun için yukarıda oluşturduğumuz sekme ve i isimli nesneleri tekrar tekrar kullanacağız.

İlk sekmemizi ekliyoruz.


Dikkat ettiyseniz burada bir metod çağırdıktan sonra geriye döndürülen değer üzerinden bir metod daha çağrılıyor. Bu şekilde sırasıyla . koyarak ilerliyor ve sekmemizin tüm özelliklerini belirliyoruz. Burada
  • newTabSpec() metoduna verdiğimiz değer sekmemize verdiğimiz bir isim
  • setIndicator() metoduna verdiğimiz ilk değer bir etiket (sekme simgesinin altında görünecek metin), ikinci değer de belirlediğimiz simge seçici XML dosyası
  • setContent() metoduna verdiğimiz değer de o sekmenin içeriğini belirleyen Intent nesnesi
Sekmemizin özelliklerini belirledikten sonra onu sekme alanına ekliyoruz ve işimiz bitiyor.

Şimdi diğer sekmeleri de oluşturalım.

Artık sekmelerimiz hazır.

Son olarak etkinliğimiz açıldığında hangi sekmenin seçili geleceğine karar vermemiz gerekiyor. (Eğer bu gerekliyse tabi.) Bunun için aşağıdaki kodu ekliyoruz.

Artık etkinliğimiz başladığında 2. indexteki sekmemiz açılacak.

Şimdi uygulamayı deneme zamanı. Ben elimdeki 4.0.3 sürümlü emulatörümde deneyeceğim.

Ups! Deneyemiyorum, çünkü oluşturduğumuz etkinlikleri uygulamanın manifest dosyasında tanımlamadık. :)

İlgili düzeltmeyi yaptıktan sonra manifest dosyamız şu şekilde görünmeli.


Şimdi çalıştırabiliriz uygulamamızı.

Gördüğünüz gibi uygulamamız 2. index yani 3. sekme seçili olarak başladı. Diğer sekmeleri de rahatlıkla dolaşabilir, simgelerin ve içeriklerin değiştiğini görebilirsiniz.

      
Eveet, bir yazının daha sonuna geldik.

Bu yazımda sizlere sekme kullanımının yanı sıra
  • Eksik import bilgilerini yüzünden alınan hataları hızlıca düzeltmeyi (Ctrl + Shift + O)
  • Bir nesnenin seçili ve seçili olmadığı durumlarda farklı resimleri nasıl kullanabileceğimizi (sekmelerin simgelerini belirlerken yazdığımız XML dosyaları)
  • Sekmelerimizi oluştururken metod çağrısından geri dönen değer üzerinden tekrar metod çağırmayı (arka arkaya . kullanarak sekmenin özelliklerini belirlerken)
anlatmaya çalıştım.

Ekran görüntülerinde sohbet uygulamamdan ve gelen tweetlerden bazı bildirimler var. Bunun için özür diliyorum.

Uygulamanın kodlarını buradan indirebilirsiniz.

İnşallah faydalı olmuştur.

Teşekkürler, iyi çalışmalar. :)

8 Şubat 2012 Çarşamba

Android Programlama VII - Uygulamalarda Çoklu Dil Desteği

Herkese merhaba.

Bu yazımda uygulamalarımızı nasıl birden fazla dili destekleyecek hale getireceğimizden bahsedeceğim.

Yazdığımız uygulamalar büyüdükçe ve biz dünyanın her yerinden insanların uygulamamızı kullanabilmesini istedikçe, uygulamamızı daha fazla dili destekler hale getirmemiz gerektiği kaçınılmaz. Neyse ki bu iş aslında o kadar da zor değil.

Daha önceki uygulamalarımızda, uygulama içinde geçecek metinleri strings.xml dosyasına yazmayı ve oradan kullanmayı neden önerdiğimi, bu yazıda daha iyi anlayacaksınız. :)

Uygulama olarak bir önceki yazımda yaptığım kayıt formu uygulamasını kullanacağım.

CokluDilOgreniyorum isminde yeni bir proje oluşturup, içindeki dosyaların hepsini bir önceki projedeki dosyalarla deeğiştirdikten sonra, aşağıda gördüğünüz açık olan EtkinlikBir.java, EtkinlikIki.java, Sabitler.java, strings.xml ve manifest dosyasının içinde bir önceki uygulamanın paket adından doğan hataları düzelterek işe başlıyoruz.
Gördüğünüz gibi bu uygulamanın paket adı com.androidce.cokludilogreniyorum şeklinde.

Şimdi strings.xml dosyamızı açalım.

Çoklu dil destekleyen uygulamalarda genellikle diğer dillere çevirileri, uygulamayı yazan insan yap(a)mayacaktır. Bu yüzden de çeviriyi yapacak diğer insanların işini kolaylaştırmak ve daha doğru çeviriler yapabilmelerine olanak sağlamak adına, kullandığımız anahtar kelimeleri aşağı yukarı herkesin anlayabileceği şekilde yazmakta fayda var. Ben burada anahtar kelimelerimi İngilizce'ye çevireceğim.
Daha kolay değişiklik yapabilmek için Eclipse'in ara & değiştir (search & replace) özelliğinden faydalanalım.

Aşağıda gördüğünüz gibi değiştirilecek metni seçtikten sonra Ctrl + H tuşlarına basıyoruz.
Bu sorgu ekranında aşağıdaki Değiştir (Replace) tuşuna basıyoruz.
Yeni metni yazıp OK'e tıkladığımızda Eclipse, tüm metin_ eşleşmelerini text_ ile değiştirecek. Gördüğünüz gibi 3 dosya içinde 26 yerde değişiklik yapılacağına dair bilgi veriliyor.
Aşağıda da gördüğünüz gibi değişiklikler yapıldı.
Şimdi etiketlerin kalan kısımlarını da değiştirelim. İşlemin bitmiş halini aşağıda görebilirsiniz.
Şu an hatalar almış olabilirsiniz, bu normal bir durumdur. Bu etiketlerin kullanıldığı java dosyalarını da düzenlememiz gerekiyor.
Gördüğünüz gibi hala eski etiketler kullanılıyor. Bunun gibi hata vermiş noktaları da düzelttikten sonra bir sonraki adıma geçebiliriz.

Artık etiketleri de herkesin anlayabileceği halde olan bir uygulama var elimizde. Şimdi bu uygulamaya İngilizce dil seçeneğini ekleyelim.

Bunun için res dizini içindeki values dizininden bir kopya oluşturacağız.

values dizini seçiliyken Ctrl tuşuna basarak bu dizini res dizini üzerine taşıyoruz. Böylece aynı dizine values dizininden bir kopya oluşturacağız.
Oluşacak yeni dizine values-en ismini veriyoruz. Böylece eğer uygulamanın çalıştığı cihazın dili İngilizce'yse, values yerine values-en dizini içindeki strings.xml kullanılacak. Aynı şekilde Türkçe dili için de -tr ekleyebilirdik values kelimesinin sonuna. Ama bu durumda uygulamamızın varsayılan dili zaten Türkçe ve biz ek olarak İngilizce dilini ekliyoruz.
Şimdi artık çeviri zamanı.

values-en dizini içindeki strings.xml dosyasını açıp metinleri çevirmeye başlayabiliriz.
Yukarıda bahsettiğim gibi, eğer siz bu metinleri çeviremeyecekseniz, bu strings.xml dosyasını başka birisine gönderip ondan çevirmesini ve size geri göndermesini isteyebilirsiniz. Bu şekilde başkaları da sizin uygulamanıza katkı sağlayabilir. Ve her isteyene uygulamanızı kendi dilinde çalıştırma imkanı da sunmuş olursunuz.

Çeviri bittikten sonra aşağıdaki gibi bir hale gelmiş olmalı strings.xml dosyanız.
Artık uygulamayı çalıştırıp denemelerimiz yapabiliriz ama şöyle bir durum var. Android 2.2 sürümüyle uygulama geliştirdiğimiz için eğer elinizde bu sürüme ait bir sanal cihaz varsa içinde Türkçe desteği olmayacaktır. O nedenle uygulamayı Android 2.2 olan sanal bir cihazda çalıştırırsanız dil İngilizce olduğundan dolayı uygulamanız direk İngilizce başlayabilir.

Peki 2 dili birden nasıl deneyebiliriz? Basit. Emulatörde Türkçe desteği Android 2.3.3 sürümünden itibaren var. Bu yazıda anlattığım gibi Android 2.3.3 veya üstü bir sürüme sahip yeni bir sanal cihaz oluşturun. Daha sonra çalıştırmayı aşağıdaki gibi gibi yapın.
Eğer Android Application altında bir seçenek yoksa Android Application'a çift tıklayarak yeni bir ayar oluşturabilirsiniz. Daha sonra aşağıdaki ekranı görebilmeniz gerek. Target kısmından cihazımızı seçeceğiz. Buradaki seçeneğin Manual'de durmasında fayda var. Böylece uygulamanızı çalıştırırken hangi cihazda çalıştıracağınızı seçebilirsiniz.
Gördüğünüz gibi uygulama çalıştırılmadan önce hangi cihazla çalıştırmak istediğimizi bize soruyor. Ben 2.3.3 olan sürümü seçiyorum.
İşte uygulamamız çalıştı. Ben bu sanal cihazın dilini önceden Türkçe'ye ayarladığım için uygulamamız Türkçe çalıştı.
 Şimdi uygulamadan geri tuşuyla çıkıp dil ayarlarını değiştirelim.
Dili İngilizce yaptıktan sonra uygulamayı tekrar başlattığınızda sonucu görebilirsiniz.
Gördüğünüz gibi artık uygulamamız birden fazla dili destekliyor.

Bu yazıda bir uygulamaya nasıl birden fazla dil desteği eklendiğini, bunu yaparken Eclipse'in bize sağladığı bazı kolaylıkları ve birden fazla sanal cihaz varken istediğiniz birisinde uygulamanızı nasıl çalıştırabileceğinizi anlatmaya çalıştım.

Bu yazıda oluşturduğum projeyi buradan indirebilirsiniz.

İnşallah faydalı olmuştur.

Kolay gelsin, iyi çalışmalar. :)

7 Şubat 2012 Salı

Android Programlama V - Buton Ekle, Tıkla, Sonuç Al II + Görüntü Ekle + Kaydırma Çubuğu Ekle

Bugün lezzetli bir uygulama bizi bekliyor. Bu gönderide, buton tıklama özelliğinin ikinci formunu,görüntü ve kaydırma çubuğu eklemeyi öğreneceğiz.

Tasarım

KısırTarifi adlı projemizi oluşturduktan sonra, aşağıdaki fotoğrafı masaüstünüze kaydedin.


Daha sonra bunu res>>>drawable-hdpi dosyasının içine sürükleyip bırakın.Şimdi main.xml dosyasını açıp graphical-layout'a gelin.İlk önce FormWidgets'tan bir tane LargeText sürükleyelim ,daha sonra Images&Media'dan ImageView sürükleyelim ve karşımıza çıkan pencerede kisir'ı seçelim.


Şimdi Form Widgets'tan iki tane buton sürükleyelim. En son olarakta bir tane TextView sürükleyelim.

Evet,işlemleri adım adım gerçekleştirdiyseniz aşağıdaki gibi bir görüntü elde etmiş olmalısınız:


Şimdi main.xml'e geçip gerekli düzenlemeleri aşağıdaki gibi yapınız:


Hataların çıkması normal,çünkü daha values>>>strings değerlerini tanımlamadık.Bundan önce ikinci TextView'e ScrollView(kaydırma çubuğu) ekleyelim:


Tasarımımız artık hazır olduğuna göre values>>>string olayını halledelim.Şimdi values dosyasına gelip strings.xml' i açalım.Ve aşağıdaki gibi mevcut olanlarına dokunmadan gerekli string'lerimizi anahtar kelimeleriyle ekleyelim.


Kopyalayıp yapıştırmanız için malzemeler ve hazırlanışını koyuyorum buraya:

Malzemeler
* 2 su bardağı ince bulgur
* 1 demet taze soğan
* 1/2 demet maydanoz
* 1/2 demet dereotu
* 2 tatlı kaşığı kuru nane
* 2 çorba kaşığı domates salçası
* 2 çorba kaşığı biber salça
* 1 tatlı kaşığı tuz
* 1 çay kaşığı karabiber
* 1 çay kaşığı kırmızıbiber
* 1 çay kaşığı pulbiber
* 1/2 çay bardağı zeytinyağı
* 1 limonun suyu


Hazırlanışı
1 – Bulguru ayıklayıp,3 kere yıkayın.
2 – Bulguru bir tencereye koyun.Üzerine bulgurun hizasından biraz az olacak şekilde sıcak su koyun.Tencerenin kapağını kapatıp,bulgurun suyu çekmesi için bekletin.
3 – Bulgur soğuduktan sonra ince kıyılmış taze soğan,maydanoz,dereotu,nane,domates,biber salçası,tuz,karabiber,kırmızıbiber,pulbiber, zeytinyağı ve limon suyunu ekleyip karıştırın.

Aktivite Oluşturma

KısırTarifiActivity.java'yı açıp tasarımımızı çalışabilir bir program haline getirelim.Widget'larımızın objelerini oluşturup, ait oldukları id'ler ile yaratalım.Bu arada çıkan hataları, ctrl+shift+o basıp gerekli sınıfları import ederek kaldıralım:


Şimdi butonları tıklanabilir kıvama getirmek için setOnClickListener metodunu çağırıp içine bu sefer parametre olarak this yazalım(Bu da bizim buton tıklamada ikinci formumuz):


setOnClickListener'dan birinin yanındaki sarı ampule iki kere tıklayıp,gelen pencerede "Let 'KısırTarifiActivity' implement 'OnClickListener' " seçin:



Şimdi de KısırTarifiActivity'nin yanındaki ampule çift tıklayıp "Add unimplemented methods" u seçiyoruz:


Oluşan onClick metodumuzun içini aşağıdaki gibi dolduruyoruz:


Burada şartlı ifadelerde tıklanılan butona göre işlem yapılıyor.Tıklanılan nesne eğer butonun id'si ile uyuşuyorsa,o zaman onun altındaki ifadeler çalıştırılır. R.string.malzemeler ise strings.xml içinde malzemeler anahtar kelimesiyle oluşturduğumuz string'in değerini döndürür.

Kodumuz burada sona eriyor, çalıştırıp bakalım.

Uygulamadan Görüntüler

İlk görüntü


Malzemeler'e Tıktan Sonra

Kaydırma çubuğunu yazının sağ tarafına tıklayarak görüntüleyip kullanabilirsiniz ya da ok tuşlarıyla aşağı yukarı gidebilirsiniz.


Hazırlanışı'na Tıktan Sonra



Uygulamayı yazdıysanız ve sorunsuz çalışıyorsa bir tabak kısırı hakkettiniz.Yanına da şöyle güzel bir çay demleyin.Oh mis.Hadi ben kaçar, öptüm,kib,bye.


Uygulamayı buradan indirebilirsiniz.