API Düzeyi: 11
Android 3.0 platformu (HONEYCOMB
), geliştiriciler tarafından Android SDK'sı için indirilebilir bir bileşen olarak sunulmaktadır. İndirilebilir platformda bir Android kitaplığı ve sistem görüntüsünün yanı sıra bir dizi emülatör görünümü ve daha fazlası yer alır. İndirilebilir platform, harici kitaplık içermez.
Android 3.0 platformu, geliştiriciler açısından Android SDK'sı için indirilebilir bir bileşen olarak mevcuttur. İndirilebilir platformda bir Android kitaplığı ve sistem görüntüsünün yanı sıra bir dizi emülatör görünümü ve daha fazlası yer alır. Android 3.0'a göre uygulama geliştirmeye veya test etmeye başlamak için Android SDK Yöneticisi'ni kullanarak platformu SDK'nıza indirin.
API'ye Genel Bakış
Aşağıdaki bölümlerde, önceki sürümden bu yana çerçeve API'sindeki yeni özellikler ve değişiklikler dahil olmak üzere, Android 3.0'daki geliştiriciler için sunulan yeniliklere teknik bir genel bakış sunulmaktadır.
Parçalar
Parça, bir etkinliğin farklı öğelerini, kendi kullanıcı arayüzünü ve yaşam döngüsünü tanımlayan bağımsız modüllere ayırmanıza olanak tanıyan yeni bir çerçeve bileşenidir. Parça oluşturmak için Fragment
sınıfını genişletmeniz ve Activity
'a benzer şekilde çeşitli yaşam döngüsü geri çağırma yöntemleri uygulamanız gerekir. Daha sonra, her bölmenin kendi yaşam döngüsünü ve kullanıcı girişlerini yönettiği çok bölmeli bir kullanıcı arayüzü oluşturmak için tek bir etkinlikte birden fazla parçayı birleştirebilirsiniz.
Ayrıca, kullanıcı arayüzü sağlamadan da parçayı kullanabilir ve bunun yerine, yalnızca etkinlik çalışırken gerçekleşen bir indirme işleminin ilerlemesini yönetmek gibi etkinlikler için bir çalışan olarak parçayı kullanabilirsiniz.
Ayrıca:
- Parçalar bağımsızdır ve bunları birden fazla etkinlikte yeniden kullanabilirsiniz
- Etkinlik içine parçalar ekleyebilir, mevcut parçaları kaldırabilir,
- Etkinlik tarafından yönetilen bir arka yığına parçalar ekleyebilirsiniz. Böylece, değiştirilen parçaların durumunu koruyabilir ve kullanıcının farklı durumlar arasında geriye doğru gitmesine olanak tanıyabilirsiniz.
- Alternatif düzenler sunarak ekran boyutuna ve yönüne göre parçaları karıştırabilir ve eşleştirebilirsiniz
- Parçalar kendi container etkinliklerine doğrudan erişebilir ve etkinliğin İşlem Çubuğuna öğe ekleyebilir (aşağıda ele alınacaktır)
Etkinliğinizdeki parçaları yönetmek için FragmentManager
kullanmanız gerekir. Bu API, etkinlikteki parçaları bulma ve önceki durumlarını geri yüklemek üzere parçaları arka yığından çıkarma gibi parçalarla etkileşime geçmek için çeşitli API'ler sağlar.
Parça ekleme veya kaldırma gibi bir işlem gerçekleştirmek için FragmentTransaction
oluşturmanız gerekir. Ardından add()
remove()
veya replace()
gibi yöntemleri çağırabilirsiniz. İşlem için gerçekleştirmek istediğiniz tüm değişiklikleri uyguladıktan sonra, commit()
yöntemini çağırmanız gerekir. Sistem, parça işlemini etkinliğe uygular.
Parça kullanma hakkında daha fazla bilgi için Parçalar dokümanlarını okuyun. API Demos uygulamasında da çeşitli örnekler mevcuttur.
İşlem Çubuğu
İşlem Çubuğu, etkinlik penceresinin üst kısmındaki geleneksel başlık çubuğunun yerini alır. Sol köşede uygulama logosu bulunur ve Seçenekler Menüsü'ndeki öğeler için yeni bir arayüz sağlar. Ayrıca, İşlem Çubuğu şunları yapmanıza da olanak tanır:
- Menü öğelerini doğrudan İşlem Çubuğuna "işlem öğeleri" olarak ekleyin.
Menü öğesiyle ilgili XML bildiriminize
android:showAsAction
özelliğini"ifRoom"
değeriyle ekleyin. Yeterli alan olduğunda, menü öğesi doğrudan İşlem Çubuğu'nda görünür. Aksi takdirde, öğe taşma menüsüne yerleştirilir. İşlem Çubuğu'nun sağ tarafındaki menü simgesiyle gösterilir. - Bir işlem öğesini widget'la (arama kutusu gibi) değiştirerek "eylem görünümü" oluşturun.
Menü öğesine ilişkin XML bildiriminde, bir düzen kaynağıyla
android:actionViewLayout
özelliğini veya bir widget'ın sınıf adıyla birlikteandroid:actionViewClass
özelliğini ekleyin. (Öğenin İşlem Çubuğunda görünmesi içinandroid:showAsAction
özelliğini de bildirmeniz gerekir.) İşlem Çubuğunda yeterli alan yoksa ve öğe, taşma menüsünde görünüyorsa normal bir menü öğesi gibi davranır ve widget'ı göstermez. - Uygulama logosuna bir işlem ekleyip bunu özel bir logoyla değiştirin
Uygulama logosuna otomatik olarak
android.R.id.home
kimliği atanır. Sistem bu kimliği, dokunulduğunda aktivitenizinonOptionsItemSelected()
geri çağırmasına iletir. Uygulamanızın "ana sayfa" etkinliğine gitme gibi bir işlem gerçekleştirmek için geri çağırma yönteminizde bu kimliğe yanıt vermeniz yeterlidir.Simgeyi logoyla değiştirmek için uygulama logonuzu manifest dosyasında
android:logo
özelliğiyle belirtin, ardından etkinliğinizdesetDisplayUseLogoEnabled(true)
çağrısı yapın. - Arkadaki parça yığınında geri gitmek için içerik haritası ekleyin
- Parçalar arasında gezinmek için sekme veya açılır liste ekleyin
- İşlem Çubuğunu temalar ve arka planlarla özelleştirme
İşlem Çubuğu, yeni holografik temayı kullanan tüm uygulamalarda standarttır. Bu, android:minSdkVersion
veya android:targetSdkVersion
simgelerinden birini "11"
olarak ayarladığınızda da standarttır.
İşlem Çubuğu hakkında daha fazla bilgi edinmek için İşlem Çubuğu dokümanlarını okuyun. API Demos uygulamasında da çeşitli örnekler mevcuttur.
Sistem panosu
Uygulamalar artık verileri (metinlerin ötesinde) sistem genelindeki panolara kopyalayıp yapıştırabilir. Kırpılmış veriler düz metin, URI veya amaç olabilir.
Kullanıcı, bir içerik sağlayıcı aracılığıyla kopyalamasını istediğiniz verilere sistem erişimi sağlayarak uygulamanızdan karmaşık içeriği (görüntü veya veri yapısı gibi) kopyalayıp bu içerik türünü destekleyen başka bir uygulamaya yapıştırabilir.
Panoyu kullanmaya başlamak için getSystemService(CLIPBOARD_SERVICE)
yöntemini çağırarak genel ClipboardManager
nesnesini alın.
Bir öğeyi panoya kopyalamak için her biri tek bir varlığı tanımlayan bir veya daha fazla ClipData.Item
nesnesi barındıran yeni bir ClipData
nesnesi oluşturmanız gerekir. Yalnızca bir ClipData.Item
içeren ClipData
nesnesi oluşturmak için newPlainText()
, newUri()
ve newIntent()
gibi yardımcı yöntemlerden birini kullanabilirsiniz. Bu yöntemlerin her biri, sağladığınız ClipData.Item
ile önceden yüklenmiş bir ClipData
nesnesi döndürür.
ClipData
öğesini panoya eklemek için ClipboardManager
örneğiniz için setPrimaryClip()
öğesine iletin.
Daha sonra, ClipboardManager
üzerinde getPrimaryClip()
çağrısı yaparak panodan bir dosyayı okuyabilirsiniz (yapıştırmak için). Aldığınız ClipData
öğesinin işlenmesi karmaşık olabilir ve veri türünü yapıştırmaya çalışmadan önce panodaki veri türünü gerçekten işleyebildiğinizden emin olmanız gerekir.
Pano aynı anda yalnızca bir kırpılmış veri parçası (bir ClipData
nesnesi) barındırır ancak bir ClipData
birden fazla ClipData.Item
içerebilir.
Daha fazla bilgi için Kopyala ve Yapıştır dokümanlarını okuyun. Ayrıca API Demoları örneğinde basit bir kopyalama ve yapıştırma uygulaması, Not Defteri örneğinde ise daha kapsamlı bir uygulama görebilirsiniz.
Sürükleyin ve bırakın
Yeni API'lar, uygulamanızın kullanıcı arayüzünde sürükle ve bırak işlemlerini basitleştirir. Sürükleme işlemi, bir ClipData
nesnesinde taşınan veri türlerinin bir yerden başka bir yere aktarılmasıdır. Sürükleme işleminin başlangıç ve bitiş noktası View
olduğundan, sürükle ve bırak işlemlerini doğrudan gerçekleştiren API'ler View
sınıfındadır.
Sürükle ve bırak işlemi, her biri bir DragEvent
nesnesiyle (ör. ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
ve ACTION_DROP
) tanımlanan çeşitli sürükleme işlemleriyle tanımlanan bir yaşam döngüsüne sahiptir. Bir sürükleme işlemine katılmak isteyen her görünüm
bu işlemleri dinleyebilir.
Etkinliğinizdeki içeriği sürüklemeye başlamak için View
üzerinde startDrag()
çağrısı yapın. Bunun için, sürüklenecek verileri temsil eden bir ClipData
nesnesi, kullanıcıların sürüklerken parmaklarının altında gördükleri "gölgeyi" kolaylaştırmak için bir View.DragShadowBuilder
ve nesneyi alabilecek görünümler içeren sürükleme nesnesiyle ilgili bilgileri paylaşabilen bir Object
sağlayın.
View
içindeki bir sürükleme nesnesini kabul etmek ("bırakma" öğesini alma) için setOnDragListener()
yöntemini çağırarak görünümü bir OnDragListener
ile kaydedin. Görünümde bir sürükleme etkinliği gerçekleştiğinde, sistem OnDragListener
için onDrag()
çağrısı yapar. Bu çağrı, gerçekleşen sürükleme işleminin türünü (ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
ve ACTION_DROP
gibi) açıklayan bir DragEvent
alır. Sürükleme sırasında, sistem sürükleme etkinliklerinden oluşan bir akış sunmak üzere sürüklemenin altındaki görünüm için sürekli olarak onDrag()
çağrısı yapar. Alıcı görünümü, DragEvent
üzerinde getAction()
çağrısı yaparak onDragEvent()
öğesine teslim edilen etkinlik türünü sorgulayabilir.
Not: Sürükleme etkinliği bir ClipData
nesnesi taşıyabilir ancak bu, sistem panosuyla ilgili değildir. Sürükle ve bırak işlemi, sürüklenen verileri hiçbir zaman sistem panosuna yerleştirmemelidir.
Daha fazla bilgi için Sürükleme ve Bırakma dokümanlarını okuyun. Ayrıca API Demos uygulamasında ve Honeycomb Gallery uygulamasında sürükle ve bırak işlevini görebilirsiniz.
Uygulama widget'ları
Android 3.0, kullanıcıların Ana ekranında daha etkileşimli uygulama widget'ları için çeşitli yeni widget sınıflarını destekler: GridView
, ListView
, StackView
, ViewFlipper
ve AdapterViewFlipper
.
Daha da önemlisi, yeni RemoteViewsService
sayesinde içerik sağlayıcı gibi uzak verilerle desteklenen GridView
, ListView
ve StackView
gibi widget'ları kullanarak koleksiyonlar içeren uygulama widget'ları oluşturabilirsiniz.
AppWidgetProviderInfo
sınıfı (bir <appwidget-provider>
öğesiyle XML'de tanımlanır) iki yeni alanı da destekler: autoAdvanceViewId
ve previewImage
. autoAdvanceViewId
alanı, uygulama widget'ının ana makinesi tarafından otomatik olarak geliştirilmesi gereken uygulama widget'ı alt görünümünün görünüm kimliğini belirtebilmenizi sağlar. previewImage
alanı, uygulama widget'ının nasıl göründüğüne dair bir önizleme belirtir ve widget seçiciden kullanıcıya gösterilir. Bu alan belirtilmezse önizleme için uygulama widget'ının simgesi kullanılır.
Android emülatörü, uygulama widget'ınız için bir önizleme resmi oluşturmanıza yardımcı olmak üzere (previewImage
alanında belirtmek üzere) "Widget Önizlemesi" adlı bir uygulama içerir. Önizleme resmi oluşturmak üzere bu uygulamayı başlatın, uygulamanız için uygulama widget'ını seçin ve önizleme resminizin nasıl görünmesini istediğinizi belirleyin, ardından bunu kaydedip uygulamanızın çekilebilir kaynaklarına yerleştirin.
Yeni uygulama widget'ı özelliklerinin nasıl kullanıldığını StackView Uygulama Widget'ı ve Hava Durumu Listesi Widget'ı uygulamalarında görebilirsiniz.
Durum çubuğu bildirimleri
Notification
API'leri, içerik açısından daha fazla durum çubuğu bildirimlerini destekleyecek şekilde genişletildi. Ayrıca, yeni Notification.Builder
sınıfı kolayca Notification
nesneleri oluşturmanıza imkan tanıyor.
Yeni özellikler:
setLargeIcon()
kullanılan bildirimde büyük simge desteği. Bu genellikle sosyal uygulamaların bildirim kaynağı olan kişinin kişi fotoğrafını göstermesi veya medya uygulamalarının bir albüm küçük resmi göstermesi için yapılır.setTicker()
kullanarak durum çubuğu sohbet şeridinde özel düzenler için destek.- Daha etkileşimli bildirim widget'ları için
PendingIntent
içeren düğmeler eklemek üzere özel bildirim düzenleri desteği. Örneğin, bildirimler bir etkinlik başlatmadan müzik çalmayı kontrol edebilir.
İçerik yükleyiciler
Yeni çerçeve API'leri Loader
sınıfını kullanarak verilerin eşzamansız olarak yüklenmesini kolaylaştırır. Çalışan iş parçacıklarından dinamik olarak veri yüklemek için bunu görünümler ve parçalar gibi kullanıcı arayüzü bileşenleriyle birlikte kullanabilirsiniz. CursorLoader
alt sınıfı, ContentProvider
tarafından desteklenen veriler için bunu yapmanıza yardımcı olmak üzere özel olarak tasarlanmıştır.
Tek yapmanız gereken, yeni bir yükleyici istendiğinde veya veriler değiştiğinde geri çağırmaları almak için LoaderCallbacks
arayüzünü uygulamak, ardından etkinliğiniz veya parçanız için yükleyiciyi başlatmak üzere initLoader()
yöntemini çağırmanız yeterlidir.
Daha fazla bilgi için Yükleyiciler dokümanlarını okuyun. LoaderCursor ve LoaderThrottle örneklerinde yükleyiciler kullanan örnek kodu da görebilirsiniz.
Bluetooth A2DP ve mikrofonlu kulaklık API'leri
Android artık bağlı Bluetooth A2DP ve mikrofonlu kulaklık profil cihazlarının durumunu doğrulamak için uygulamalar için API'ler içeriyor. Örneğin, uygulamalar, müzik dinlemek için bir Bluetooth mikrofonlu kulaklığın ne zaman bağlı olduğunu tespit edebilir ve kullanıcıyı uygun şekilde bilgilendirebilir. Uygulamalar ayrıca satıcıya özgü AT komutları için yayınları alabilir ve kullanıcıya bağlı cihazın durumu (örneğin, bağlı cihazın pil seviyesi düşük olduğunda) hakkında bilgi verebilir.
Bluetooth istemcisi bağlıyken veya bağlantısı kesildiğinde geri arama almak için A2DP
veya HEADSET
profil sabitiyle getProfileProxy()
ve BluetoothProfile.ServiceListener
ile çağırarak ilgili BluetoothProfile
değerini başlatabilirsiniz.
Animasyon çerçevesi
Yepyeni bir esnek animasyon çerçevesi, herhangi bir nesnenin (Görünüm, Çekilebilir, Parça, Nesne veya başka herhangi bir şey) rastgele özelliklerini canlandırmanıza olanak tanır. Bu parametre, bir animasyonun aşağıdakiler gibi çeşitli yönlerini tanımlamanıza olanak tanır:
- Süre
- Tekrarlanma miktarı ve davranışı
- Zaman interpolasyonu türü
- Animatör, animasyonları birlikte, sırayla veya belirtilen gecikmelerden sonra oynatacak şekilde ayarlar
- Kare yenileme gecikmesi
Bir nesnenin tamsayı, kayan ve on altılı renk değerleri için varsayılan olarak bu animasyon özelliklerini ve diğer unsurları tanımlayabilirsiniz. Yani bir nesnenin bu türlerden birinde özellik alanı olduğunda, bir animasyonu etkilemek için zaman içinde değerini değiştirebilirsiniz. Başka bir değer türüne animasyon eklemek için TypeEvaluator
arayüzünü uygulayarak sisteme söz konusu türdeki değerlerin nasıl hesaplanacağını belirtirsiniz.
Bir özelliğin değerlerini canlandırmak için kullanabileceğiniz iki animatör vardır: ValueAnimator
ve ObjectAnimator
. ValueAnimator
, animasyon değerlerini hesaplar ancak sonuç olarak animasyon eklenen belirli bir nesneyi veya özelliği bilmez. Yalnızca hesaplamaları gerçekleştirir. Sizin de güncellemeleri
dinlemeniz ve verileri kendi mantığınıza göre işlemeniz gerekir. ObjectAnimator
, ValueAnimator
sınıfının bir alt sınıfıdır ve animasyon oluşturmak üzere nesneyi ve özelliği ayarlamanıza olanak tanır ve tüm animasyon işlerini yönetir.
Yani ObjectAnimator
öğesine, animasyon oluşturulacak nesneyi, nesnenin zamanla değişecek özelliğini ve zaman içinde özelliğe uygulanacak bir dizi değeri verip animasyonu başlatırsınız.
Ayrıca LayoutTransition
sınıfı, etkinlik düzeninizde yaptığınız değişiklikler için otomatik geçiş animasyonlarını etkinleştirir. Düzenin bir bölümünde geçişleri etkinleştirmek için bir LayoutTransition
nesnesi oluşturun ve setLayoutTransition()
yöntemini çağırarak bu nesneyi herhangi bir ViewGroup
üzerinde ayarlayın. Bu, gruba öğe eklendiğinde veya gruptan öğe kaldırıldığında varsayılan animasyonların çalışmasına neden olur. Özel animasyonlar belirtmek için LayoutTransition
üzerinde setAnimator()
yöntemini çağırın ve yukarıda açıklanan ValueAnimator
veya ObjectAnimator
gibi özel bir Animator
sağlayın.
Daha fazla bilgi için Mülk Animasyonu dokümanlarına bakın. API Demos uygulamasındaki animasyon API'lerini kullanarak çeşitli örnekleri de görebilirsiniz.
Genişletilmiş kullanıcı arayüzü çerçevesi
- ListView ve GridView için çoktan seçmeli seçim
setChoiceMode()
için yeniCHOICE_MODE_MULTIPLE_MODAL
modu, kullanıcılarınListView
veyaGridView
cihazından birden fazla öğe seçmesine olanak tanır. Kullanıcılar İşlem Çubuğu ile birlikte kullanıldığında birden fazla öğe seçebilir ve ardından İşlem Çubuğundaki (Çoktan Seçmeli İşlem Modu'na dönüştürülmüş bir seçenek listesinden) gerçekleştirilecek işlemi seçebilirler.Çoktan seçmeli seçimi etkinleştirmek için
setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)
numaralı telefonu arayın vesetMultiChoiceModeListener()
ileMultiChoiceModeListener
kaydettirin.Kullanıcı bir öğeye uzun bastığında İşlem Çubuğu Çoktan Seçmeli İşlem Modu'na geçer. Öğeler seçildiğinde sistem
onItemCheckedStateChanged()
yöntemini çağırarakMultiChoiceModeListener
'a bildirim gönderir.Çoktan seçmeli seçimin bir örneği için API Demos örnek uygulamasındaki List15.java sınıfına bakın.
- Görünümleri dönüştürmek için yeni API'ler
Yeni API'ler, etkinlik düzeninizdeki görünümlere kolayca 2D ve 3D dönüşümler uygulamanıza olanak tanır. Görünümün düzeni, yönünü, şeffaflığını ve diğer özelliklerini tanımlayan bir dizi nesne özelliğiyle yeni dönüşümler oluşturmak mümkün.
Görünüm özelliklerini ayarlamak için yeni yöntemler şunlardır:
setAlpha()
,setBottom()
,setLeft()
,setRight()
,setBottom()
,setPivotX()
,setPivotY()
,setRotationX()
,setRotationY()
,setScaleX()
,setScaleY()
,setAlpha()
ve diğerleri.Bazı yöntemlerde, varsayılan bir dönüşüm uygulamak için düzen dosyanızda belirtebileceğiniz karşılık gelen bir XML özelliği de bulunur. Kullanılabilir özellikler şunlardır:
translationX
,translationY
,rotation
,rotationX
,rotationY
,scaleX
,scaleY
,transformPivotX
,transformPivotY
vealpha
.Bu yeni görünüm özelliklerinden bazılarını yeni animasyon çerçevesiyle (yukarıda açıklanmıştır) birlikte kullanarak bazı gösterişli animasyonları görünümlerinize kolayca uygulayabilirsiniz. Örneğin, bir görünümü y ekseninde döndürmek için
ObjectAnimator
değeriniView
, "rotationY" özelliği, başlangıç ve bitiş değerleriyle sağlayın:Kotlin
ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply { duration = 2000 start() }
Java
ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360); animator.setDuration(2000); animator.start();
- Yeni holografik temalar
Standart sistem widget'ları ve genel görünüm yeniden tasarlandı ve yeni bir "holografik" kullanıcı arayüzü temasına sahip. Sistem, standart stil ve tema sistemini kullanarak yeni temayı uygular.
android:minSdkVersion
veyaandroid:targetSdkVersion
değerini"11"
olarak ayarlayarak, Android 3.0 platformunu hedefleyen tüm uygulamalar varsayılan olarak holografik temayı devralır. Bununla birlikte, uygulamanız kendi temasını da uyguluyorsa stillerinizi holografik temayı devralacak şekilde güncellemediğiniz sürece temanız holografik temayı geçersiz kılar.Holografik temayı etkinliklere ayrı ayrı uygulamak veya kendi tema tanımlarınızda uygulamak için birkaç yeni
Theme.Holo
temasından birini kullanın. Uygulamanız Android'in 3.0'dan önceki sürümleriyle uyumluysa ve özel temalar uyguluyorsa platform sürümüne göre bir tema seçmeniz gerekir. - Yeni widget'lar
AdapterViewAnimator
Görünümleri arasında geçiş yaparken animasyonlar gerçekleştiren bir
AdapterView
için temel sınıf.AdapterViewFlipper
Kendisine eklenen iki veya daha fazla görünüm arasında animasyon yapan basit
ViewAnimator
. Tek seferde yalnızca bir çocuk gösterilir. İstenirse düzenli aralıklarla her bir alt öğe arasında otomatik olarak geçiş yapabilir.CalendarView
Kullanıcıların bir takvimden tarihe dokunarak tarih seçmesine olanak tanır ve takvimi kaydırarak veya kaydırarak istenen tarihe kadar kaydırabilir. Widget'taki tarih aralığını yapılandırabilirsiniz.
ListPopupWindow
Kendisini bir ana makine görünümüne bağlar ve bir
EditText
görünümüne yazarken öneri listesi gibi seçeneklerin bir listesi görüntüler.NumberPicker
Kullanıcının önceden tanımlanmış bir aralıktan bir sayı seçebilmesini sağlar. Widget, bir giriş alanı ve sayı seçmek için yukarı ve aşağı düğmeleri sunar. Giriş alanına dokunulduğunda, kullanıcı değerler arasında gezinebilir veya mevcut değeri doğrudan düzenlemek için tekrar dokunabilir. Ayrıca, konumları dizelerle eşlemenize de olanak tanır. Böylece, dizin konumu yerine karşılık gelen dize görüntülenir.
PopupMenu
Bir görünüme sabitlenmiş kalıcı bir pop-up pencerede bir
Menu
görüntüler. Pop-up, yer varsa çapa görünümünün altında, yoksa üzerinde de görünür. IME (yumuşak klavye) görünüyorsa kullanıcı menüye dokununcaya kadar pop-up, IME ile çakışmaz.SearchView
Arama sorgularını belirli bir etkinliğe göndermek ve arama önerilerini görüntülemek (geleneksel arama iletişim kutusuyla aynı şekilde) için yapılandırabileceğiniz bir arama kutusu sağlar. Bu widget, özellikle İşlem Çubuğunda bir arama widget'ının sunulması açısından yararlıdır. Daha fazla bilgi edinmek için Arama Arayüzü Oluşturma bölümüne bakın.
StackView
Alt öğelerini 3D bir yığın içinde gösteren ve kullanıcıların rolodex gibi görünümler arasında kaydırmasına olanak tanıyan bir görünüm.
Grafik
- Donanım hızlandırmalı 2D grafikler
Artık manifest öğenizin
<application>
öğesinde veya bağımsız<activity>
öğelerindeandroid:hardwareAccelerated="true"
değerini ayarlayarak uygulamanız için OpenGL oluşturucuyu etkinleştirebilirsiniz.Bu işaret, daha hızlı çizim yapmalarını sağlayarak uygulamalara yardımcı olur. Bu, daha düzgün animasyonlar, daha düzgün kaydırma ve genel olarak daha iyi performans ve kullanıcı etkileşimine yanıt sağlar.
- Donanım ve yazılım katmanları için desteği görüntüleyin
Varsayılan olarak bir
View
öğesinde katman belirtilmemiştir. Görünümün,setLayerType()
veyalayerType
özelliğini kullanarakLAYER_TYPE_HARDWARE
veLAYER_TYPE_SOFTWARE
değerleriyle belirtilen bir donanım ya da yazılım katmanı tarafından destekleneceğini belirtebilirsiniz.Bir donanım katmanı, donanıma özel bir dokuyla desteklenir (genellikle Çerçeve Arabelleği Nesneleri veya OpenGL donanımında FBO) ve görünümün, Android'in donanım oluşturma ardışık düzeni kullanılarak oluşturulmasına neden olur (yalnızca görünüm hiyerarşisi için donanım hızlandırma açıksa). Donanım hızlandırma devre dışıyken donanım katmanları tam olarak yazılım katmanları gibi davranır.
Bir yazılım katmanı bit eşlem ile desteklenir ve donanım hızlandırma etkinleştirilmiş olsa bile Android'in yazılım oluşturma ardışık düzeni kullanılarak görüntünün oluşturulmasına neden olur. Etkilenen görünüm ağacı sık sık güncellendiğinde yazılım katmanlarından kaçınılmalıdır. Her güncellemede yazılım katmanının yeniden oluşturulması gerekir. Bu da yavaş olabilir.
Daha fazla bilgi için
LAYER_TYPE_HARDWARE
veLAYER_TYPE_SOFTWARE
belgelerine bakın. - Renderscript 3D grafik motoru
Renderscript, 3D sahneler oluşturmak için bir API'nin yanı sıra maksimum performans için özel, platformdan bağımsız bir gölgelendirici dili sağlayan bir çalışma zamanı 3D çerçevesidir. Renderscript'i kullanarak grafik işlemlerini ve veri işlemeyi hızlandırabilirsiniz. Renderscript; uygulamalar, duvar kağıtları, bantlar ve daha fazlası için yüksek performanslı 3D efektler oluşturmanın ideal bir yoludur.
Daha fazla bilgi için Renderscript ile 3D Oluşturma ve Hesaplama dokümanlarına bakın.
Medya
- Zaman atlamalı video
Video Kamera API'leri artık zaman atlamalı video kaydetme özelliğini destekliyor.
setCaptureRate()
, karelerin yakalanma hızını ayarlar. - Resim akışları için doku desteği
Yeni
SurfaceTexture
, bir görüntü akışını OpenGL ES dokusu olarak yakalamanıza olanak tanır.Camera
örneğiniz içinsetPreviewTexture()
yöntemini çağırarak video oynatma veya kare önizlemelerinin kameradan çekileceğiSurfaceTexture
öğesini belirtebilirsiniz. - HTTP Canlı yayını
Uygulamalar artık HTTP Canlı akış oturumu başlatmak için medya çerçevesine bir M3U oynatma listesi URL'si iletebilir. Medya çerçevesi, uyarlanabilir bit hızı dahil olmak üzere HTTP Canlı akış özelliklerinin çoğunu destekler. Daha fazla bilgi için Desteklenen Medya Biçimleri dokümanına bakın.
- EXIF verileri
ExifInterface
; fotoğraf diyafram açıklığı, ISO ve pozlama süresi için yeni alanlar içerir. - Video kamera profilleri
Yeni
hasProfile()
yöntemi ve çeşitli video kalitesi profilleri (ör.QUALITY_1080P
,QUALITY_720P
,QUALITY_CIF
ve diğerleri) video kamera kalitesi seçeneklerini belirlemenize olanak tanır. - Dijital medya dosya aktarımı
Platformda, USB üzerinden Medya/Resim Aktarım Protokolü (MTP/PTP) yerleşik desteği bulunmaktadır. Bu destek, kullanıcıların her tür medya dosyasını cihazlar arasında ve bir ana bilgisayara kolayca aktarmasını sağlar. Geliştiriciler, kullanıcıların cihazlar arasında aktarmak veya paylaşmak isteyebilecekleri zengin medya dosyalarını oluşturmasına veya yönetmesine olanak tanıyan uygulamalar oluşturarak bu destekten yararlanabilir.
- Dijital hak yönetimi (DRM)
Dijital hakların kontrol edilmesi ve uygulanması için genişletilebilir yeni dijital haklar yönetimi (DRM) çerçevesi. İki mimari katmanda uygulanmıştır:
- Uygulamalara açık olan ve standart uygulamalar için Dalvik sanal makinesi üzerinden çalışan bir DRM çerçevesi API'si.
- Çerçeve API'sini uygulayan ve çeşitli DRM şemaları için hak yönetimini ve şifre çözmeyi gerçekleştirmek üzere DRM eklentileri için bir arayüz sunan yerel kod DRM yöneticisi.
Bu çerçeve, uygulama geliştiriciler için korunan içeriğin yönetimini basitleştiren soyut, birleştirilmiş bir API sunar. API, DRM işlemlerinin karmaşıklığını gizler ve hem korumalı hem de korumasız içerik için çeşitli DRM şemalarında tutarlı bir işlem modu sağlar.
DRM çerçevesinin eklenti API'si; cihaz üreticileri, içerik sahipleri ve internet dijital medya sağlayıcıları için içerik korumasının güvenli bir şekilde uygulanması amacıyla Android sistemine tercih edilen bir DRM şeması için destek ekleme yöntemi sağlar.
Önizleme sürümü, dijital hakları kontrol etmek ve uygulamak için herhangi bir yerel DRM eklentisi sağlamaz. Ancak, cihaz üreticileri cihazlarıyla birlikte DRM eklentilerini de gönderebilirler.
Tüm DRM API'lerini
android.drm
paketinde bulabilirsiniz.
Klavye desteği
- Control, Meta, Caps Lock, Num Lock ve Scroll Lock değiştiricileri için destek. Daha fazla bilgi için
META_CTRL_ON
ve ilgili alanlara bakın. - Escape, Home, End, Delete ve diğer tuşların desteklenmesi de dahil olmak üzere tam masaüstü stili klavyeler için destek.
getKeyboardType()
sorgusunu sorgulayıpKeyCharacterMap.FULL
komutunu kontrol ederek önemli etkinliklerin tam bir klavyeden gelip gelmediğini belirleyebilirsiniz TextView
artık Control+X, Control+C, Ctrl+V ve Control+A tuş kombinasyonlarını kullanarak klavye tabanlı kesme, kopyalama, yapıştırma ve tümünü seçme işlemlerini desteklemektedir. Ayrıca PageUp/PageDown, Home/End ve klavye tabanlı metin seçimini de destekler.KeyEvent
, anahtar değiştiricinin durumunu doğru ve tutarlı bir şekilde kontrol etmeyi kolaylaştırmak için birkaç yeni yöntem ekler. Bkz.hasModifiers(int)
,hasNoModifiers()
,metaStateHasModifiers()
,metaStateHasNoModifiers()
.- Uygulamalar
Activity
,Dialog
veyaView
alt sınıflandırmalarını yapıponKeyShortcut()
uygulamasını uygulayarak özel klavye kısayolları uygulayabilir. Bir anahtar, Control tuşuyla birleştirildiğinde çerçeve bu yöntemi çağırır. Seçenekler Menüsü oluştururken her bir<item>
öğesi için (veyasetShortcut()
ile)android:alphabeticShortcut
ya daandroid:numericShortcut
özelliğini ayarlayarak klavye kısayolları kaydedebilirsiniz. - Android 3.0,
KeyCharacterMap.VIRTUAL_KEYBOARD
kimliğine sahip yeni bir "sanal klavye" cihazı içeriyor. Sanal klavyede, test girişi için önemli etkinliklerin sentezlenmesinde yararlı olan, masaüstü tarzı bir ABD tuş haritası bulunur.
Bölünmüş dokunma etkinlikleri
Önceden, bir kerede yalnızca tek bir görünüm dokunma etkinliklerini kabul edebiliyordu. Android 3.0, dokunma etkinliklerini görünümlere ve hatta pencerelere bölme desteği ekler, böylece farklı görünümler eşzamanlı dokunma etkinliklerini kabul edebilir.
Bir uygulama Android 3.0'ı hedeflediğinde bölünmüş dokunma etkinlikleri varsayılan olarak etkinleştirilir. Diğer bir deyişle, uygulama android:minSdkVersion
veya android:targetSdkVersion
özelliğinin değerini "11"
olarak ayarladığında.
Ancak, aşağıdaki özellikler, belirli görünüm gruplarındaki görünümler ve pencerelerdeki bölünmüş dokunma etkinliklerini devre dışı bırakmanıza olanak tanır.
- Görünüm grupları için
android:splitMotionEvents
özelliği, bir düzendeki alt görünümler arasında gerçekleşen bölünmüş dokunma etkinliklerini devre dışı bırakmanıza olanak tanır. Örneğin:<LinearLayout android:splitMotionEvents="false" ... > ... </LinearLayout>
Bu şekilde, doğrusal düzendeki alt görünümler, dokunma etkinliklerini bölemez; aynı anda yalnızca bir görünüm dokunma etkinliklerini alabilir.
android:windowEnableSplitTouch
stil özelliği, aktiviteye veya uygulamanın tamamına yönelik bir temaya uygulayarak bölünmüş dokunma etkinliklerini pencerelerde devre dışı bırakmanıza olanak tanır. Örneğin:<style name="NoSplitMotionEvents" parent="android:Theme.Holo"> <item name="android:windowEnableSplitTouch">false</item> ... </style>
Bu tema bir
<activity>
veya<application>
öğesine uygulandığında, yalnızca geçerli etkinlik aralığındaki dokunma etkinlikleri kabul edilir. Örneğin, pencereler arasında bölünmüş dokunma etkinlikleri devre dışı bırakıldığında sistem çubuğu, dokunma etkinliklerini etkinlikle aynı anda alamaz. Bu durum, etkinlik içindeki görünümlerin dokunma etkinliklerini bölünüp bölünemeyeceğini etkilemez. Varsayılan olarak etkinlik, dokunma etkinliklerini görünümler arasında bölmeye devam edebilir.Tema oluşturma hakkında daha fazla bilgi için Stilleri ve Temaları Uygulama başlıklı makaleyi okuyun.
WebKit
WebView
öğesinden oluşan bir parça oluşturmak için yeniWebViewFragment
sınıfı.- Yeni
WebSettings
yöntemleri:setDisplayZoomControls()
, kullanıcının parmak hareketleriyle yakınlaştırma yapmasına izin verirken ekrandaki yakınlaştırma kontrollerini gizlemenize olanak tanır (setBuiltInZoomControls()
ayarlanmalıdırtrue
).- Yeni
WebSettings
yöntemi olansetEnableSmoothTransition()
, kaydırma ve yakınlaştırma sırasında yumuşak geçişler etkinleştirmenize olanak tanır. Etkinleştirildiğinde, WebView, performansı en üst düzeye çıkarmak için bir çözüm seçer (örneğin, Web Görünümü'nün içeriği geçiş sırasında güncellenmeyebilir).
- Yeni
WebView
yöntemleri:- Gizlendiğinde Web Görünümü ile ilişkili tüm işlemleri duraklatmak için
onPause()
geri çağırma işlevini kullanın. Bu, Web Görünümü ön planda değilken gereksiz CPU veya ağ trafiğini azaltmak için yararlıdır. onPause()
sırasında duraklatılmış olan Web Görünümü ile ilişkili işlemenin devam etmesi içinonResume()
geri çağırması.saveWebArchive()
, geçerli görünümü cihaza bir web arşivi olarak kaydetmenize olanak tanır.showFindDialog()
geçerli görünümde bir metin araması başlatır.
- Gizlendiğinde Web Görünümü ile ilişkili tüm işlemleri duraklatmak için
Tarayıcı
Tarayıcı uygulaması, web uygulamalarını desteklemek için aşağıdaki özellikleri ekler:
- Medya yakalama
HTML Media Capture spesifikasyonu tarafından tanımlandığı gibi Tarayıcı, web uygulamalarının cihazın ses, görüntü ve video yakalama özelliklerine erişmesine izin verir. Örneğin, aşağıdaki HTML, kullanıcının yüklemek üzere bir fotoğraf çekmesi için bir giriş sağlar:
<input type="file" accept="image/*;capture=camera" />
capture=camera
parametresini hariç tutarak da kullanıcı kamerayla yeni bir fotoğraf çekmeyi veya cihazdan (ör. Galeri uygulamasından) bir fotoğraf seçmeyi tercih edebilir. - Cihaz Yönü
Cihaz Yön Etkinliği spesifikasyonunda tanımlandığı gibi Tarayıcı, web uygulamalarının cihazın fiziksel yönü ve hareketi hakkında bilgi sağlayan DOM etkinliklerini dinlemesine izin verir.
Cihazın yönü x, y ve z eksenleriyle ifade edilir. Derece ve hareket ise hız ve dönüş hızı verileriyle ifade edilir. Bir web sayfası,
"deviceorientation"
etkinlik türüylewindow.addEventListener
yöntemini çağırarak yön etkinliklerine kaydedilebilir ve"devicemotion"
etkinlik türünü kaydederek hareket etkinliklerini kaydedebilir. - CSS 3D Dönüşümleri
CSS 3D Dönüşüm Modülü spesifikasyonunda tanımlandığı gibi Tarayıcı, CSS tarafından oluşturulan öğelerin üç boyutta dönüştürülmesine izin verir.
JSON yardımcı programları
Yeni JsonReader
ve JsonWriter
sınıfları, JSON akışlarını okuyup yazmanıza yardımcı olur. Yeni API'ler, bir dokümanı bellekte işleyen org.json
sınıflarını tamamlar.
Oluşturucu yöntemini çağırarak ve JSON dizesini besleyen InputStreamReader
öğesini ileterek bir JsonReader
örneği oluşturabilirsiniz.
Ardından beginObject()
yöntemini çağırarak bir nesneyi okumaya başlayın, nextName()
ile bir anahtar adı okuyun, değeri türe göre (nextString()
ve nextInt()
gibi) yöntemleri kullanarak okuyun ve hasNext()
doğru olduğunda bunu yapmaya devam edin.
Oluşturucuyu çağırıp uygun OutputStreamWriter
değerini ileterek JsonWriter
örneği oluşturabilirsiniz. Ardından, JSON verilerini okuyucuya benzer bir şekilde yazın. Özellik adı eklemek için name()
, ilgili değeri eklemek için de uygun value()
yöntemini kullanın.
Bu sınıflar varsayılan olarak katıdır. Her sınıftaki setLenient()
yöntemi, öğrencileri kabul ettikleri şeyler konusunda daha serbest olacak şekilde yapılandırır. Bu esnek ayrıştırma modu, org.json
öğesinin varsayılan ayrıştırıcısıyla da uyumludur.
Yeni özellik sabitleri
Uygulamanızın bağlı olduğu donanım ve yazılım özellikleri grubunu harici kuruluşlara (ör. Google Play) bildirmek için <uses-feature>
manifest öğesi kullanılmalıdır. Bu sürümde Android, uygulamaların bu öğeyle tanımlayabileceği aşağıdaki yeni sabit değerleri ekler:
"android.hardware.faketouch"
Beyan edildiğinde bu, uygulamanın emüle edilmiş dokunmatik ekran (veya daha iyisi) sunan bir cihazla uyumlu olduğunu belirtir. Emüle edilmiş dokunmatik ekran sunan bir cihaz, dokunmatik ekran yeteneklerinin bir alt kümesini emüle edebilen bir kullanıcı girişi sistemi sağlar. Bu tür bir giriş sistemine örnek olarak ekran üzerinde imleç çalıştıran bir fare veya uzaktan kumanda verilebilir. Bu tür giriş sistemleri; aşağı, yukarı tıklama ve sürükleme gibi temel dokunma etkinliklerini destekler. Ancak, sahte dokunmatik cihazlarda daha karmaşık giriş türleri (ör. hareketler, hızla sallananlar vb.) daha zor veya imkansız olabilir (ve çoklu dokunma hareketleri kesinlikle mümkün değildir).
Uygulamanız karmaşık hareketler gerektirmiyorsa ve uygulamanızın, emüle edilmiş dokunmatik ekrana sahip cihazlardan filtrelenmesini istemiyorsanız
"android.hardware.faketouch"
için bir<uses-feature>
öğesi belirtmeniz gerekir. Bu şekilde, uygulamanız yalnızca emüle edilmiş dokunmatik ekran girişi sağlayanlar da dahil olmak üzere çok sayıda cihaz türü tarafından kullanılabilir.Dokunmatik ekran özellikleri, sahte dokunma özelliklerinin üst düzey bir parçasıdır, bu nedenle dokunmatik ekranlı tüm cihazlar
"android.hardware.faketouch"
özelliğini de destekler. Dolayısıyla, dokunmatik ekrana gerçekten ihtiyaç duymadığınız sürece sahte dokunma için bir<uses-feature>
öğesi eklemeniz gerekir.
Yeni izinler
"android.permission.BIND_REMOTEVIEWS"
Bu,
RemoteViewsService
uygulamasının uygulanması için<service>
manifest öğesinde gerekli bir izin olarak beyan edilmelidir. Örneğin, bir koleksiyon görünümünü doldurmak içinRemoteViewsService
kullanan bir Uygulama Widget'ı oluşturduğunuzda manifest girişi aşağıdaki gibi görünebilir:<service android:name=".widget.WidgetService" android:exported="false" android:permission="android.permission.BIND_REMOTEVIEWS" />
Yeni platform teknolojileri
- Depolama
- Yerleşik eMMC depolamasını etkinleştirmek için ext4 dosya sistemi desteği.
- MTP cihazlarını desteklemek için FUSE dosya sistemi.
- Klavyeleri ve USB çoğaltıcıları desteklemek için USB ana makine modu desteği.
- MTP/PTP desteği
- Linux Çekirdeği
- Sürüm 2.6.36'ya yükseltildi
- Dalvik VM
- SMP için destek ve optimizasyon sağlayan yeni kod
- JIT altyapısında çeşitli iyileştirmeler
- Çöp toplayıcı iyileştirmeleri:
- SMP için ayarlandı
- Daha büyük yığın boyutları için destek
- Bit eşlemler ve bayt arabellekleri için birleşik işleme
- Dalvik Core Kitaplıkları
- Yeni, çok daha hızlı NIO uygulaması (modern G/Ç kitaplığı)
- İyileştirilmiş istisna mesajları
- Süreç boyunca doğruluk ve performans düzeltmeleri
API farklılıkları raporu
Android 3.0'daki (API Düzeyi 11) tüm API değişikliklerinin ayrıntılı görünümü için API Farkları Raporu'na bakın.
API Düzeyi
Android 3.0 platformu, çerçeve API'sinin güncellenmiş bir sürümünü sunar. Android 3.0 API'ye, sistemin kendisinde depolanan bir tam sayı tanımlayıcı (11) atanır. "API Düzeyi" adı verilen bu tanımlayıcı, sistemin bir uygulamanın uygulamayı yüklemeden önce sistemle uyumlu olup olmadığını doğru şekilde belirlemesine olanak tanır.
Uygulamanızda Android 3.0'da sunulan API'leri kullanmak için uygulamayı Android 3.0 SDK platformunda sağlanan Android kitaplığına göre derlemeniz gerekir. İhtiyaçlarınıza bağlı olarak, uygulamanın manifest dosyasındaki <uses-sdk>
öğesine bir android:minSdkVersion="11"
özelliği eklemeniz de gerekebilir. Uygulamanız yalnızca Android 2.3 ve sonraki sürümlerde çalışacak şekilde tasarlandıysa özelliğin bildirilmesi, uygulamanın platformun önceki sürümlerine yüklenmesini engeller.
Daha fazla bilgi için API Düzeyi nedir?