Android 3.0 API'leri

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 birlikte android:actionViewClass özelliğini ekleyin. (Öğenin İşlem Çubuğunda görünmesi için android: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 aktivitenizin onOptionsItemSelected() 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ğinizde setDisplayUseLogoEnabled(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 yeni CHOICE_MODE_MULTIPLE_MODAL modu, kullanıcıların ListView veya GridView 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 ve setMultiChoiceModeListener() ile MultiChoiceModeListener 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ğırarak MultiChoiceModeListener'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 ve alpha.

    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ğerini View, "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 veya android: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> öğelerinde android: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() veya layerType özelliğini kullanarak LAYER_TYPE_HARDWARE ve LAYER_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 ve LAYER_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çin setPreviewTexture() yöntemini çağırarak video oynatma veya kare önizlemelerinin kameradan çekileceği SurfaceTexture öğ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ıp KeyCharacterMap.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 veya View alt sınıflandırmalarını yapıp onKeyShortcut() 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 (veya setShortcut() ile) android:alphabeticShortcut ya da android: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 yeni WebViewFragment 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ır true).
    • Yeni WebSettings yöntemi olan setEnableSmoothTransition(), 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çin onResume() 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.

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üyle window.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çin RemoteViewsService 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?