Transcript Document

Muharrem Taç
M2 Bilişim
Gelecekonline
Android Nedir
Android Nedir ?
Google’ın 5 Kasım 2007’de 34 şirket ile birlik olarak
çalışmalarına başladığı mobil işletim sistemi projesidir. Şu
an 65 şirket bu birliktedir.
Bu birliğin adı Open Handset Alliance’dır ve web sitesi :
http://www.openhandsetalliance.com
Android sadece bir işletim sistemi değildir.
Yazılım geliştirme platformu, SDK’sı, Eclipse Plugini, API’si
ve Android Market ile birlikte dev bir ekosistemdir.
Open Handset Alliance
Android Nedir ?
Android Nedir ?
Pek çok cihaz, donanım,
Pek çok sensör,
Pek çok farklılaşmış sürüm,
Pek çok AR-GE projesi,
Pek çok uygulama mağazası,
Pek çok geliştirme ortamı, dili ve teknolojisi,
İçeren bir EKOSİSTEMDİR.
Android’in Özellikleri
Linux kerneli
Uygulama çatısı
Dalvik Virtual Machine (Java)
Webkit tabanlı dahili internet tarayıcısı
SQL Lite veritabanı
Video-Ses desteği (MPEG4, H.264, MP3, AAC, AMR, JPG,
PNG, GIF)
GSM telefon desteği
3B ve 2B gelişmiş grafikler, LG Real 3D ile 3 boyutlu
cihazlar,
Bluetooth, NFC, EDGE, 3G, ve WiFi (donanıma bağımlı)
Ön ve arka kamera, GPS, pusula ve akselerometre
(ivmeölçer) (donanıma bağımlı)
Zengin uygulama geliştirme ortamı (emülatör, Eclipse plugin)
Android Market
Multitasking
Widget
Notification
Android’in Özellikleri
Handset layouts
The platform is adaptable to larger, VGA, 2D graphics library, 3D graphics library based on
OpenGL ES 2.0 specifications, and traditional smartphone layouts.
Storage
SQLite, a lightweight relational database, is used for data storage purposes.
Connectivity
Android supports connectivity technologies including GSM/EDGE, IDEN, CDMA, EV-DO,
UMTS, Bluetooth, Wi-Fi, LTE, NFC and WiMAX.
Messaging
SMS and MMS are available forms of messaging, including threaded text messaging and
now Android Cloud To Device Messaging (C2DM) is also a part of Android Push Messaging
service.
Multiple language support
Android supports multiple languages.[41]
Web browser
The web browser available in Android is based on the open-source WebKit layout engine,
coupled with Chrome's V8 JavaScript engine. The browser scores 100/100 on the Acid3 test
on Android 4.0, however does have some rendering issues.
Android’in Özellikleri
Java support
While most Android applications are written in Java, there is no Java Virtual Machine in the
platform and Java byte code is not executed. Java classes are compiled into Dalvik
executables and run on Dalvik, a specialized virtual machine designed specifically for
Android and optimized for battery-powered mobile devices with limited memory and CPU.
J2ME support can be provided via third-party applications.
Media support
Android supports the following audio/video/still media formats: WebM, H.263, H.264 (in 3GP
or MP4 container), MPEG-4 SP, AMR, AMR-WB (in 3GP container), AAC, HE-AAC (in MP4 or
3GP container), MP3, MIDI, Ogg Vorbis, FLAC, WAV, JPEG, PNG, GIF, BMP.[78]
Streaming media support
RTP/RTSP streaming (3GPP PSS, ISMA), HTML progressive download (HTML5 <video> tag).
Adobe Flash Streaming (RTMP) and HTTP Dynamic Streaming are supported by the Flash
plugin.[79] Apple HTTP Live Streaming is supported by RealPlayer for Mobile,[80] and by
the operating system in Android 3.0 (Honeycomb).[45]
Additional hardware support
Android can use video/still cameras, touchscreens, GPS, accelerometers, gyroscopes,
barometers, magnetometers, dedicated gaming controls, proximity and pressure sensors,
thermometers, accelerated 2D bit blits (with hardware orientation, scaling, pixel format
conversion) and accelerated 3D graphics.
Android’in Özellikleri
Multi-touch
Android has native support for multi-touch which was initially made available in handsets
such as the HTC Hero. The feature was originally disabled at the kernel level (possibly to
avoid infringing Apple's patents on touch-screen technology at the time).[81] Google has
since released an update for the Nexus One and the Motorola Droid which enables multitouch natively.[82]
Bluetooth
Supports A2DP, AVRCP, sending files (OPP), accessing the phone book (PBAP), voice
dialing and sending contacts between phones. Keyboard, mouse and joystick (HID) support
is available in Android 3.1+, and in earlier versions through manufacturer customizations
and third-party applications.[83]
Video calling
Android does not support native video calling, but some handsets have a customized
version of the operating system that supports it, either via the UMTS network (like the
Samsung Galaxy S) or over IP. Video calling through Google Talk is available in Android
2.3.4 and later. Gingerbread allows Nexus S to place Internet calls with a SIP account. This
allows for enhanced VoIP dialing to other SIP accounts and even phone numbers. Skype 2.1
offers video calling in Android 2.3, including front camera support.
Android’in Özellikleri
Multitasking
Multitasking of applications is available.[84]
Voice based features
Google search through voice has been available since initial release.[85] Voice actions for
calling, texting, navigation, etc. are supported on Android 2.2 onwards.[86]
Tethering
Android supports tethering, which allows a phone to be used as a wireless/wired Wi-Fi
hotspot. Before Android 2.2 this was supported by third-party applications or manufacturer
customizations.[87]
Screen capture
Android natively supports the ability to capture a screenshot by method of pressing both
the power and volume-down buttons at the same time on an Android device. This native
support was first included within the Android 4.0 (Ice Cream Sandwich) update, which is
first seen on the Galaxy Nexus smartphone.[88] Previously, Android did not feature native
support for screen capturing which would have likely been due to security concerns.
Furthermore, prior manufacturer and third-party customizations as well as using a PC
connection (DDMS developer's tool) were the only known methods of capturing a
screenshot on Android.
Android’in Özellikleri
System C library - a BSD-derived implementation of the standard C
system library (libc), tuned for embedded Linux-based devices
Media Libraries - based on PacketVideo's OpenCORE; the libraries
support playback and recording of many popular audio and video
formats, as well as static image files, including MPEG4, H.264, MP3, AAC,
AMR, JPG, and PNG
Surface Manager - manages access to the display subsystem and
seamlessly composites 2D and 3D graphic layers from multiple
applications
LibWebCore - a modern web browser engine which powers both the
Android browser and an embeddable web view
SGL - the underlying 2D graphics engine
3D libraries - an implementation based on OpenGL ES 1.0 APIs; the
libraries use either hardware 3D acceleration (where available) or the
included, highly optimized 3D software rasterizer
FreeType - bitmap and vector font rendering
SQLite - a powerful and lightweight relational database engine available
to all applications
Android Mimarisi
Versiyonlar
Versiyonlar
Versiyon 1 ve 1.1 ilk sürümler (Astro ve Bender ile
başlıyor)
Versiyon 1.5 Cupcake
Versiyon 1.6 Donut
Versiyon 2.X (2.0, 2.1) Eclair
Versiyon 2.2 Froyo
Versiyon 2.3.X (2.3.1 - 2.3.7) Gingerbread
Versiyon 3.X
(3.1,3,2)
Honeycomb
Versiyon 4.X (4.0.1 - 4.0.3) Ice Cream Sandwich
Versiyonlar
http://developer.android.com/resources/dashboard/platform-versions.html
Versiyonlar
Android 1.1 Bender
Android 1.5 Cupcake
Versiyonlar
Android 1.6 Donut
Android 2.0 ve 2.1
Eclair
Versiyonlar
Android 2.2 Froyo
Android 2.3 Gingerbread
Versiyonlar
Android 3.0 Honeycomb
Versiyonlar
Android 4.0 Ice Cream Sandwich
Enteresan Uygulamalar
Enteresan Uygulamalar
Android’in ve donanımın desteklediği özelliklere göre
pusula, akseloremetre, GPS gibi özellikleri kullanan
uygulamalar yaygınlaşmaktadır.
Özellikle “Layar” Augmented Reality konseptiyle bakılan
yer hakkında görsel bilgiler vermektedir.
Bunun yanında pusulalar, Panoramio gibi konum bilgisine
dayalı fotoğrafçılık uygulamaları, Google Maps API
kullanan uygulamalar, Jedi ışın kılıcı, Zippo çakmak, her
türden harekete duyarlı oyunlar vs. Android üzerinde
çalışmakta ve geliştirilmektedir.
Sosyal ağ uygulamaları (Google Plus, Twitter, Facebook,
Foursquare)
Enteresan Uygulamalar
Layar
Android Uygulama Mağazaları
Android Uygulama Mağazaları
Android Market
Android Pazarı
Android Uygulama Mağazaları
Turkcell Uygulamalar
Samsung S-Andoid
Android cihazları
Google telefonları
Android Arayüzleri
HTC Sense
Samsung Touchwiz
Sony Timescape
3D API’ler
HTC 3D
LG 3D
Android Yazılım Geliştirme
Android Yazılım Geliştirme
Java ile Yazılım Geliştirme:
Google tarafından önerilen altyapıdır, Android’in içerisindeki uygulamaların
pekçoğu Java ile yazılmıştır, Eclipse, Netbeans, IntelliJ Idea IDE’leri kullanılabilir,
HTML5 ile Yazılım Geliştirme:
Phonegap gibi sistemlerle uygulama içersinde HTML5 çalıştırmak mümkündür.
Adobe Flex ile Yazılım Geliştirme:
Adobe’nin Flash Builder aracı ile ActionScript kullanarak yazılım geliştirilebilir.
Mono for Android ile Yazılım Geliştirme:
.NET altyapısı ile C# dilinde yazılım geliştirilebilir.
Android Yazılımlarında Bileşenler
Aktiviteler(Activities):
Aktiviteler çalıştırılabilir kodun belirli kısımlarını oluşturan ve zamanın belirli
bölgelerinde kullanıcı ile ve sistemle etkileşime geçerek gerekli veriyi sağlayan,
sonunda da kullanılmadıkları zaman sistem tarafından sonlandırılan parçalardır.
Servisler (Services):
Servisler bilgisayarlardan da tanıdık olduğumuz arkaplanda çalışan ve
uygulamanın bir parçası olan kısımlardır. Aygıt kapanana kadar arkaplanda hazır
olarak çalışırlar.Genellikle kullanıcı arayüzü olarak sunulmazlar. Uygulamaların
ihtiyacı olan verilerin ve hizmetlerin sağlanmasında kullanılırlar.
Kaynak : http://androidgelistir.blogspot.com/2010/07/android-ile-uygulamasnn-bilesenleri-ve.html
Android Yazılımlarında Bileşenler
Broacast and Intent Receivers:
Broadcast bilinen broadcast uygulamaları gibi aygıtın temel mesajlarını algılayan
kısımlardır. Düşük pil uyarısı yada zaman dilimi değiştirilmesi gibi olaylarda aygıt,
uygulamaların tümünü bu durumlardan haberdar eder. Intent receivers ise belirli
bir amaca göre bazı varolan uygulamalardan ve servislerden bilgi toplanmasıdır.
Varolan bir uygulamayı kullanarak uygulama geliştirildiğinde bu tür olay
yakalayıcılar kullanılır.
İçerik Sağlayıcılar(Content Provider):
Aygıt üzerindeki uygulamalar dosya sisteminde yada dosya sistemi üzerindeki
SQLite veritabanı üzerinde uygulamaya ait verileri saklarlar. Diğer uygulamaların
da belirli veri tiplerine uygun olarak bu verileri kullanabilmesi Content Provider ile
sağlanır. Content provider uygulamalara bu verilere erişim için bazı metodlar
sunar.
Kaynak : http://androidgelistir.blogspot.com/2010/07/android-ile-uygulamasnn-bilesenleri-ve.html
Android SDK
Eclipse Android Plugin
Android SDK İçeriği
Emülatörler,
Dökümanlar,
Örnek kodlar,
USB sürücüleri (usb_driver/android_winusb.inf),
Versiyonlar,
Güncelleme sihirbazı,
Araçlar…
Android SDK İçeriği
Virtual Devices
Android SDK İçeriği
Virtual Devices Emulator 1.1
Android SDK İçeriği
Virtual Devices Emulator 1.5
Android SDK İçeriği
Virtual Devices Emulator 1.6
Android SDK İçeriği
Virtual Devices Emulator 2.0
Android SDK İçeriği
Virtual Devices Emulator 2.1
Android SDK İçeriği
Virtual Devices Emulator 2.2
Android SDK İçeriği
Virtual Devices Emulator 2.3
Android SDK İçeriği
Installed Packages
Android SDK İçeriği
Available Packages
Android SDK İçeriği
Settings
Android SDK İçeriği
About
Android Eclipse Plugin
Android Eclipse Plugin
Eclipse ile Android üzerinde yazılım geliştirme,
development, debugging , test ve deployment yapılmasına
imkan veren plugindir.
Eclipse Help-> Install New Software yolu ile giderek
aşağıdaki adres eklenir:
https://dl-ssl.google.com/android/eclipse/
Android Eclipse Plugin
Android Eclipse Plugin
Eclipse Android plugin şunları sağlar :
Dalvik Debug Monitor Server (DDMS) perspective,
Eclipse içinden Android SDK and AVD Manager bağlantısı,
Allocation Tracker view,
Devices view,
Emulator control view,
File Explorer view,
Heap view,
LogCat view,
Resource Explorer view,
Threads view ,
New Android Project Menu
Android Eclipse Plugin
Dalvik Debug Monitor Server (DDMS) Perspective
Android Eclipse Plugin
Eclipse’e Android Plugin yüklenince workspace’de SDK tanımlaması
yapılmadıysa bir ekran geliyor.
Yeni Android Projesi
Eclipse File -> New -> Other… Android -> Android Project
Yeni Android Projesi
Önceki versiyonlarda tek
sayfada gerçekleşen proje
oluşturma süreci sihirbaz
halinde sayfalara bölünmüştür.
Project name : Proje adı
Yeni Android Projesi
Build target : Android
versiyonu, mutlaka seçiyoruz,
Yeni Android Projesi
Application Name : Android’in
uygulamayı göreceği isim.
Package name : Uygulamanın
kullanacağı paketlendirme,
mecburi alan.
Create Activity : Uygulama
oluşturulurken örnek activity
oluşması sağlanabilir.
Yeni Android Projesi
Projemiz yaratıldı.
Klasörler şöyle :
src,
gen,
res.
---------------------------------------------AndroidManifest.xml
ve
default.properties adında iki dosya var.
Yeni Android Projesi
Proje içerisinde bir de çalışmaya hazır Activity var. Bu haliyle
çalıştırabiliriz.
Yeni Android Projesi
Proje üzerinde sağ tuş -> Run As -> Android Application
Yeni Android Projesi
Projemizin çalışır hali. Tabii ki “Hello World”
Projedeki Önemli Dosyalar
AndroidManifest.xml
Activity adını verdiğimiz ekranların bilgisini, uygulama bazlı global bilgileri tutar.
Uygulamamızın isteyeceği ayrıcalıklar da buradan tanımlanır.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.m2bilisim.android"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".MainActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Projedeki Önemli Dosyalar
res/layout/main.xml
Her bir Activity için görsel tasarım öğelerini içerir.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
Projedeki Önemli Dosyalar
res/values/strings.xml
Mesaj metinlerinin tutulduğu dosyadır.
Activity’ler için düzenlenen xml’lerden android:text=“@string/hello” şeklinde
kullanılabilir.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, StartUp!</string>
<string name="app_name">tbd</string>
</resources>
res/values/ dizininde başka xml dosyaları tutarak iş bölümü yapabiliriz.
res/values/color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="white">#fff</color>
<color name="black">#000</color>
<color name="gelecekonline_red">#d11517</color>
<color name="gelecekonline_gray">#323232</color>
<color name="gelecekonline_light_gray">#efefef</color>
</resources>
Activity
Bir aktivite 3 duruma sahip olabilir :
•Aktif ya da çalışır durumda uygulama kullanıcıya odaklanmıştır
ve kullanıcıdan gelecek verilere göre sonuçlar üretilir,
•Bekleme modunda başka bir uygulama çalışmaya başlamış,
uygulama arkaplana itilmiş fakat aynı şekilde çalışmaya devam
etmektedir. Uygulama bekleme modunda düşük bellek
durumlarında sistem tarafından yokedilebilir,
•Durdurulmuş durumda uygulama tamamen çalışmaz durumdadır
buna rağmen en son verilere sahiptir. Uygulamaya ayrılmış bellek
sistem tarafından gerektiğinde kullanılabilir.
Kaynak : http://androidgelistir.blogspot.com/2010/07/android-ile-uygulamasnn-bilesenleri-ve.html
Activity
Aktivite bir durumdan diğer duruma geçerken aşağıdaki metodları
çalıştırır.
void
void
void
void
void
void
void
onCreate(Bundle savedInstanceState)
onStart()
onRestart()
onResume()
onPause()
onStop()
onDestroy()
Kaynak : http://androidgelistir.blogspot.com/2010/07/android-ile-uygulamasnn-bilesenleri-ve.html
Activity
Activity
Android ekranlarının her biri bir android.app.Activity sınıfından extend olmak
zorundadır.
Event handling için Listener interface’lerini implemente etmeleri gerekir.
public class MainActivity extends Activity implements OnClickListener
Activity
Android ekranlarının her biri için layout tanımlamak gerekir.
Örnek :
res/layout/nextactivity.xml
Bir Activity’den diğer Activity’ye erişmek için, örneğin bir click eventi içerisinden:
public void onClick(View v) {
Intent itemintent = new Intent(this, NextActivity.class);
startActivity(itemintent);
}
Intent
Intent kelime anlamı olarak niyet demektir. Android’de işler Intent’ler üzerinden
yürür diyebiliriz. Bir Activity başlatmak, bir servis çalıştırmak, bir sisteme
broadcast yapmak, broadcast dinlemek gibi işlemler için önce Intent oluşturulmalı
daha sonra bu Intent başlatılmalıdır.
//Yeni activity acmak
Intent activityIntent = new Intent(getApplicationContext(),
YeniActivity.class);
startActivity(activityIntent);
//Bir numara cevirmek
Intent telefonIntent = new Intent(Intent.ACTION_DIAL,
Uri.parse("tel:05051110011"));
startActivity(telefonIntent);
//Web site baslatmak
Intent webIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://gomobil.in"));
startActivity(webIntent);
Layout
Layout dosyaları, Activity veya görsel elemanlar (View’lar) içersinde öğelerin
nerede ve nasıl durması gerektiğini belirleyen şemalar gibi düşünülebilir.
Activity’nin ne şekilde duracağı, içerisinde ne gibi öğelerin olacağı bilgisi xml
dosyalarıyla belirlenir. Projedeki res dizini altında bulunan layout dizini içerisinde
Activity veya View’lar için xml uzantılı dosyalar düzenlenir. Bu dosyaların
içerisindeki bilgi Android tarafından okunarak Activity’ler veya View’lar üzerine
yüklenir.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
Buradaki main aslında layout dizinindeki main.xml adlı layout dosyasına karşılık gelir.
Activity’ler içerisinde çeşitli View’lar olabileceği gibi yazılımcı tarafından
geliştirilmiş özel View’lar da Layout dosyalarında düzenlenebilir.
Layout
gen dizininde bulunan R.java
dosyası; res dizininde bulunan
layout dizinine eklenen her
xml dosyasını otomatik olarak
kendi içerisinde yaratmaktadır.
Bu yöntem ile xml tasarım
şema (layout) dosyalarına
Java sınıflarından erişim
mümkün olmaktadır.
Layout
AbsoluteLayout : Ekran üzerinde hangi görsel elemanın nerede duracağını piksel
piksel sabitler. Örneğin bir butonun soldan 20 piksel, üstten 20 piksel
koordinatlarında durmasını istersek AbsoluteLayout kullanmalıyız.
LinearLayout : Bütün eklenen görsel elemanları alt alta veya yan yana çizgisel
olarak dizer.
RelativeLayout : Görsel öğelerin ekranda üst-sol, üst-sağ, üst-orta, dikey-orta,
yatay -orta, taban-sol, taban-orta, taban-sol gibi ekran boyununa bağlı olmaksızın
ayarlanmasını sağlar.
TableLayout : Ekran öğelerini tablolar halinde göstermek için kullanılabilen
layouttur. Herbir TableLayout içerisinde TableRow’lar halinde tablo satırları
oluşturulabilir.
FrameLayout : En basit türde layout sistemdir. İçerisine eklenen görsel öğeleri
sola dayalı olarak gösterir ve eğer birden fazla öğe eklerseniz bunları üst üste
gösterir. Resim dosyalarının üzerine yazı eklemek için kullanılabilir. FrameLayout
yapısı sekmeli ekran yapımında da kullanılmaktadır.
View
Activity’lerde kullanılan görsel yapılara View denilmektedir.
View’lar ListView, TextView, WebView, ScrollView gibi çeşitli şekillerde olabilirler.
ListView : Alt alta dizilecek görsel öğeleri göstermede kullanılır. Java’nın dizi
yapılarını doğrudan ekrana basabilmektedir.
TextView : Ekranda metin içeriği göstermede kullanılabilen View türüdür. Diğer
pekçok programlama dilinde Label olarak geçer.
TextView’lara metin girişi birkaç yöntemle yapılabilir:
WebView : HTML içeriklerini ve web sayfalarını Activity’ler içerisinde açabilen
View’dır.
ScrollView : Uzun içeriklerin kaydırma çubuğu ile aşağıya doğru inilerek
görüntülenmesini sağlayan View’dir. Sözgelimi içerisinde çok sayıda bilginin
bulunduğu bir ListView ScrollView içerisinde gösterilebilir. Böylece ekrana
sığmayan listeler kullanıcı tarafından aşağıya doğru kaydırılarak görüntülenebilir.
View
Activity’lerde kullanılan görsel yapılara View denilmektedir.
View’lar ListView, TextView, WebView, ScrollView gibi çeşitli şekillerde olabilirler.
ListView : Alt alta dizilecek görsel öğeleri göstermede kullanılır. Java’nın dizi
yapılarını doğrudan ekrana basabilmektedir.
TextView : Ekranda metin içeriği göstermede kullanılabilen View türüdür. Diğer
pekçok programlama dilinde Label olarak geçer.
TextView’lara metin girişi birkaç yöntemle yapılabilir:
WebView : HTML içeriklerini ve web sayfalarını Activity’ler içerisinde açabilen
View’dır.
ScrollView : Uzun içeriklerin kaydırma çubuğu ile aşağıya doğru inilerek
görüntülenmesini sağlayan View’dir. Sözgelimi içerisinde çok sayıda bilginin
bulunduğu bir ListView ScrollView içerisinde gösterilebilir. Böylece ekrana
sığmayan listeler kullanıcı tarafından aşağıya doğru kaydırılarak görüntülenebilir.
View
Activity’lerde kullanılan görsel yapılara View denilmektedir.
View’lar ListView, TextView, WebView, ScrollView gibi çeşitli şekillerde olabilirler.
ListView : Alt alta dizilecek görsel öğeleri göstermede kullanılır. Java’nın dizi
yapılarını doğrudan ekrana basabilmektedir.
TextView : Ekranda metin içeriği göstermede kullanılabilen View türüdür. Diğer
pekçok programlama dilinde Label olarak geçer.
TextView’lara metin girişi birkaç yöntemle yapılabilir:
WebView : HTML içeriklerini ve web sayfalarını Activity’ler içerisinde açabilen
View’dır.
ScrollView : Uzun içeriklerin kaydırma çubuğu ile aşağıya doğru inilerek
görüntülenmesini sağlayan View’dir. Sözgelimi içerisinde çok sayıda bilginin
bulunduğu bir ListView ScrollView içerisinde gösterilebilir. Böylece ekrana
sığmayan listeler kullanıcı tarafından aşağıya doğru kaydırılarak görüntülenebilir.
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Main extends Activity {
View
private ListView listView;
private String yazarlar[]={"Erol Dizdar","Egemen Mede","Selçuk Yavuz"};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView)findViewById(R.id.yazarlarView);
listView.setAdapter(new
ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 ,
yazarlar));
}
}
View
WebView
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webviewornek);
WebView webView = (WebView) findViewById(R.id.webview);
webView.loadUrl("http://www.gelecekonline.com/mobile");
}
Aşağıdaki şekilde internet erişim izni alınmalıdır:
<uses-permission android:name="android.permission.INTERNET"/>
View (Form elemanları)
Kullanıcıdan veri almak için kullanılan yapılar da birer View’dır.
Mesela EditText, Button, Radio Button, DatePicker, Spinner, gibi çok sayıda form
elemanı vardır ve bunlar da aslında View sınıfından türemiştir.
View’lar çeşitli event’ları listen edebilirler (dinleyebilirler) vardır.
Örneğin Button için OnClickListener event’ı vardır.
ListView’ın OnItemClickListener event’ı bulunmaktadır.
Bu listener’ları kullanabilmek için OnClickListener Interface’inden dinamik sınıf
yaratmak gereklidir. Örnek:
Button ornekButton = (Button)findViewById(R.id.ornekButton);
ornekButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
TextView textView = (TextView)findViewById(R.id.ornekText);
textView.setText("Butona tıklandı");
}
});
View (Form elemanları)
ListView için OnItemClickListener Interface’i kullanılabilir.
listView.setOnItemClickListener(this);
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id)
{
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
Toast.LENGTH_SHORT).show();
}
Dialoglar
Android’de çok sayıda iletişim kutusu seçeneği vardır.
Dialog : Mesaj kutusu çıkarır. Genişletilebilir ve özelleştirilebilir. Layout
yüklenebilir.
AlertDialog : Uyarı mesajıdır. Tamam – iptal gibi görünümleri olabilir.
ProgressDialog : İşlem yapıldığında kullanılabilen mesaj kutusudur.
DatePickerDialog : Tarih seçim mesajı
TimePickerDialog : Zaman seçim mesaj kutusu
Custom Dialog : Özelleştirilmiş bir mesaj kutusudur. İçerisinde başka View’lar
olabilir.
Dialoglar
Dialog : Mesaj kutusu çıkarır. Genişletilebilir ve özelleştirilebilir. Layout
yüklenebilir.
final Dialog dialog = new Dialog(DialogTestActivity.this);
dialog.setTitle("Basit dialog");
dialog.show();
AlertDialog : Evet/hayır şeklinde mesaj kutusu çıkarır.
AlertDialog.Builder builder = new AlertDialog.Builder(DialogTestActivity.this);
builder.setMessage("Uygulamadan çıkılsın mı?").
setCancelable(false).setPositiveButton("Evet",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
}).setNegativeButton("Hayır",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert= builder.create();
alert.show();
Dialoglar
AlertDialog : Liste şeklinde mesaj kutusu çıkarır.
final CharSequence[] items = {"Kirmızı", "Yeşil", "Mavi"};
AlertDialog.Builder builder = new AlertDialog.Builder(DialogTestActivity.this);
builder.setTitle("Pick a color");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
alert.show();
Dialoglar
AlertDialog : Seçim listesi şeklinde mesaj kutusu çıkarır.
final CharSequence[] items = {"Kirmızı", "Yeşil", "Mavi"};
AlertDialog.Builder builder = new AlertDialog.Builder(DialogTestActivity.this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
alert.show();
Menu
Activity içerisinde onPrepareOptionsMenu() metoduyla menu oluşturabiliyoruz.
public boolean onPrepareOptionsMenu(Menu menu) {
menu.add(0, 0, 1, R.string.BaseMenu);
menu.add(0, 1, 2, R.string.About);
return super.onPrepareOptionsMenu(menu);
}
Seçilen menu elemanını onOptionsItemSelected(MenuItem item) metoduyla
algılayabiliriz. Örnek :
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
finish();
case 1:
final CharSequence[] items = {"Kirmızı", "Yeşil", "Mavi"};
AlertDialog.Builder builder = new AlertDialog.Builder(DialogTestActivity.this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
alert.show();
}
return false;
}
Theme
Android’in kendine ait temaları bulunmaktadır.
Default tema siyah zemin üzerine beyaz yazılar şeklindedir. Ama bu temanın
alternatifleri vardır.
Bir activity’nin temasını değiştirmek için AndroidManifest.xml’de :
Beyaz zemin üzerine siyah yazılar için :
android:theme="@style/android:Theme.Light" tanımlaması yapabiliriz.
Şeffaf arkaplan için : android:theme="@style/android:Theme.Translucent“
Ekrana diyalog kutusu şeklinde Activity basmak için :
android:theme="@style/android:Theme.Dialog"
Theme – Custom Theme
Programcı isterse kendine ait temalar da oluşturabilir.
Bunu yapabilmek için /res/values içerisinde styles.xml adında bir dosya oluşturup
tanımlamalarını bu dosyada yapar.
<resources>
<style name="Theme.Ntv" parent="android:Theme.Light">
<item name="android:windowBackground">@drawable/bg</item>
</style>
</resources>
Android themes.xml : http://goo.gl/P8hv1
Android styles.xml : http://goo.gl/d46Zf
Thread
Thread yönetimi iki şekilde yapılıyor:
Klasik yöntem ve AsnycTask ile
Klasik yöntem:
Activity’yi Runnable Interface’inden türetmek : implements Runnable
Bir Thread çalıştırmak :
Thread thread = new Thread(Main.this);
thread.start();
run() methodu yazmak :
public void run() {
pi_string = Pi.computePi(800).toString();
handler.sendEmptyMessage(0);
}
Handler sınıfı içerisindeki handleMessage() ile buradan dönecek mesajı yakalamak:
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
pd.dismiss();
tv.setText(pi_string);
}
};
Thread - AscyncTask
AsnycTask ile asenkron işlem yapmak Google tarafından önerilen yöntemdir.
Bu yöntemde Activity içersinde InnerClass olarak AsyncTask sınıfından oluşturulan bir sınıf yazılır.
Örnek :
private class PiHesaplaTask extends AsyncTask<String, Void, Void>
Bu sınıfın execute metodu çağırılarak asenkron işlem başlatılır.
Örnek : new PiHesaplaTask().execute();
AsyncTask sınıfının içerisinde süreç ilk başladığı zaman onPreExecute() metodu aktifleşir. Bu metotta işlemin
yapıdığına dair bir uyarı kutusu çıkarılabilir. Asenkron işlem doInBackground() metodu içerisinde gerçekleşir.
onPostExecute() metodu ile işlem bittiğinde asenkron işlem sonuçlanır ve uyarı kutusu kapatılır.
Tam sınıf örneği:
private class PiHesaplaTask extends AsyncTask<String, Void, Void> {
private ProgressDialog progressDialog;
protected void onPreExecute() {
progressDialog = ProgressDialog.show(MainAsyncTask.this, "Hesaplanıyor..", "Pi sayısı hesaplanıyor");
}
@Override
protected Void doInBackground(String... arg0) {
pitext = Pi.computePi(800).toString();
return null;
}
protected void onPostExecute(final Void unused) {
progressDialog.dismiss();
textView.setText(pitext);
}
}
Widget
Widget’lar uygulamaların masaüstünde çalışabilen kısımlarıdır. Wndget’ların da aynen Activity
gibi Layout’ları olur.
AndroidManifest.xml dosyasına receiver olarak tanıtılırlar.
<receiver android:name=".Widget1" android:label="Widget1">
Intent-filter olarak android.appwidget.action.APPWIDGET_UPDATE eklenir.
AndroidManifest.xml dosyasında metadata ilavesi yapmak gereklidir. Ve metadata dosyasına
widget tanımlama xml bilgisi eklenir.
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget1" />
AndroidManifest.xml ‘de bir widget tanımlamak için gereken tüm tanımlama:
<receiver android:name=".Widget1" android:label="Widget1">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget1" />
</receiver>
Widget
Widget’ların hangi layout’u kullanacağı, boyutlarının ne olacağı gibi bilgiler için ayrı bir xml
dosyası oluşturulur. Örnek widget1.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="50dp"
android:minHeight="72dp"
android:updatePeriodMillis="10000"
android:initialLayout="@layout/widget_layout"
android:label="Hello1"
/>
Burada android:initialLayout="@layout/widget_layout" ile tanımlanan satır widget_layout.xml
dosyasıdır.
Widget sınıfları android.appwidget. AppWidgetProvider sınıfından türetilir ve en önemli
metodu onUpdate() metodudur.
Droiddraw
Android için görsel olarak GUI tasarımı yapmaya olanak tanıyan
bir uygulamadır.
http://www.droiddraw.org/
Site üzerinde çalışan applet ya da indirilebilen Swing uygulaması
ile XML olarak GUI çıktısı alınabilir.
Motodev Studio
Motorola tarafından Android geliştiricileri için çıkarılmış harika bir
IDE’dir.
Çok sayıda örnek kod (snippet) içerir,
görsel programlamayı kolaylaştırmaktadır,
Mevcut Eclipse Plugin’ini geliştirmiştir,
Motodev Studio
Android Market’e Uygulama Gönderme
Android Market’e Uygulama Gönderme
Android Market’e Uygulama Gönderme
Kaynakça:
http://wikipedia.org
http://www.android.com
http://developer.android.com
Teşekkürler