Android 3.0 API'leri

API Düzeyi: 11

Geliştiriciler, Android 3.0 platformu (HONEYCOMB), Android SDK'sı için indirilebilir bir bileşen olarak sunulur. İndirilebilir platformda bir Android kitaplığı ve sistem görüntüsünün yanı sıra bir dizi emülatör dış görünümü ve daha fazlası yer alır. İndirilebilir platformda harici kitaplık yoktur.

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 dış görünümü ve daha fazlası bulunur. Android 3.0'a göre 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, Android 3.0'daki geliştiriciler için yeni özellikler ve önceki sürümden bu yana çerçeve API'sinde yapılan değişiklikler de dahil olmak üzere yeniliklere dair 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. Bir 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 birden fazla parçayı tek bir etkinlikte birleştirebilirsiniz.

Ayrıca, kullanıcı arayüzü sağlamadan da parça kullanabilir ve bunun yerine, sadece etkinlik çalışırken gerçekleşen bir indirme işleminin ilerlemesini yönetmek gibi iş için bir çalışan olarak parçayı kullanabilirsiniz.

Ayrıca:

  • Parçalar bağımsızdır ve bunları birden fazla etkinlikte yeniden kullanabilirsiniz.
  • Etkinliğin içinde parçalar ekleyebilir, kaldırabilir, değiştirebilir ve parçalara animasyon uygulayabilir
  • 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 parçaları ekran boyutuna ve yönüne göre karıştırıp eşleştirebilirsiniz
  • Parçalar, kapsayıcı etkinliklerine doğrudan erişebilir ve etkinliğin İşlem Çubuğu'na katkıda bulunabilir (aşağıda ele alınacaktır)

Etkinliğinizdeki parçaları yönetmek amacıyla, etkinlikteki parçaları bulmak ve önceki durumlarını geri yüklemek için arka yığındaki parçaları patlatmak gibi, parçalarla etkileşimde bulunmak için çeşitli API'ler sağlayan FragmentManager özelliğini kullanmanız gerekir.

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 ve sistem parça işlemini etkinliğe uygular.

Parçalar kullanma hakkında daha fazla bilgi için Parçalar dokümanlarını okuyun. API Demos uygulamasında çeşitli örnekler de 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 yer alıyor ve Seçenekler Menüsü'ndeki öğeler için yeni bir arayüz sağlıyor. Ayrıca, İşlem Çubuğu şunları yapmanıza da olanak tanır:

  • Menü öğelerini doğrudan İşlem Çubuğu'na ("işlem öğeleri" olarak) ekleyin.

    Menü öğesiyle ilgili XML bildiriminize android:showAsAction özelliğini "ifRoom" değeriyle ekleyin. Yeterli yer olduğunda menü öğesi doğrudan İşlem Çubuğunda görünür. Aksi takdirde, öğe taşma menüsüne yerleştirilir ve İş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, düzen kaynağına sahip android:actionViewLayout özelliğini veya widget'ın sınıf adını içeren 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, dokunulduğunda etkinliğinizin onOptionsItemSelected() geri çağırmasına gönderilir. Uygulamanızın "ana sayfa" etkinliğine gitmek gibi bir işlem gerçekleştirmek için geri çağırma yönteminizde bu kimliğe yanıt vermeniz yeterlidir.

    Simgeyi bir logoyla değiştirmek için manifest dosyasında uygulama logonuzu android:logo özelliğiyle belirtin, ardından etkinliğinizde setDisplayUseLogoEnabled(true) çağrısı yapın.

  • Arkadaki parça yığınında geriye doğru gezinmek 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 uygulamalar için standarttır. Bu, android:minSdkVersion veya android:targetSdkVersion simgelerini "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 çeşitli örnekler de mevcuttur.

Sistem panosu

Uygulamalar artık metinlerin ötesinde, verileri sistem genelindeki panodan kopyalayıp yapıştırabilir. Kırpılmış veriler düz metin, URI veya amaç olabilir.

Kullanıcının kopyalamasını istediğiniz verilere sistem erişimi sağlayarak, kullanıcı bir içerik sağlayıcı aracılığıyla karmaşık içeriği (resim veya veri yapısı gibi) uygulamanızdan 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 global ClipboardManager nesnesini alın.

Bir öğeyi panoya kopyalamak için her biri tek bir varlığı açıklayan bir veya daha fazla ClipData.Item nesnesinin bulunduğu 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 üzerinden getPrimaryClip() çağrısı yaparak panodan bir dosyayı okuyabilirsiniz (yapıştırmak için). Aldığınız ClipData öğesinin kullanımı 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.

Panoda aynı anda yalnızca bir kırpılmış veri parçası (ClipData nesnesi) tutulur 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'ler, uygulamanızın kullanıcı arayüzündeki sürükle ve bırak işlemlerini basitleştirir. Sürükleme işlemi, bir ClipData nesnesi içinde taşınan veri türlerinin bir yerden diğerine aktarılmasıdır. Sürükleme işleminin başlangıç ve bitiş noktaları bir View'dir. Bu nedenle, sürükle ve bırak işlemlerini doğrudan işleyen API'ler View sınıfındadır.

Sürükle ve bırak işleminin yaşam döngüsü, ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED ve ACTION_DROP gibi her biri bir DragEvent nesnesiyle tanımlanır ve birden fazla sürükleme işlemiyle tanımlanır. 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 sağlayın, kullanıcıların sürüklerken parmaklarının altında gördükleri "gölgeyi" kolaylaştırmak için View.DragShadowBuilder ve nesneyi alabilecek görünümlerle sürükleme nesnesiyle ilgili bilgileri paylaşabilen bir Object öğesi sağlayın.

View içinde sürükleme nesnesini kabul etmek ("bırak" değerini almak) için setOnDragListener() yöntemini çağırarak görünümü 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ü (örneğin ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED ve ACTION_DROP) 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() hedefine teslim edilen etkinlik türünü sorgulayabilir.

Not: Sürükleme etkinliği bir ClipData nesnesi içerebilir ancak bu, sistem panosuyla ilgili değildir. Sürükleyip bırakma 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 özelliğinin bir kullanımını görebilirsiniz.

Uygulama widget'ları

Android 3.0, kullanıcıların Ana ekranında daha etkileşimli uygulama widget'ları için GridView, ListView, StackView, ViewFlipper ve AdapterViewFlipper gibi yeni widget sınıflarını destekler.

Daha da önemlisi, içerik sağlayıcı gibi uzak verilerle desteklenen GridView, ListView ve StackView gibi widget'ları kullanarak koleksiyonlar içeren uygulama widget'ları oluşturmak için yeni RemoteViewsService kullanabilirsiniz.

AppWidgetProviderInfo sınıfı (XML'de <appwidget-provider> öğesiyle 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üneceğine dair bir önizleme belirtir ve widget seçiciden kullanıcıya gösterilir. Bu alan sağlanmazsa ö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 bu widget'ı kaydedip uygulamanızın çekilebilir kaynaklarına yerleştirin.

Yeni uygulama widget'ı özelliklerinin uygulanma şeklini StackView App Widget ve Weather List Widget uygulamalarında görebilirsiniz.

Durum çubuğu bildirimleri

Notification API'leri, daha fazla içerik zengin durum çubuğu bildirimlerini destekleyecek şekilde genişletilmiştir ve yeni Notification.Builder sınıfı kolayca Notification nesnelerini oluşturmanıza olanak tanır.

Yeni özellikler:

  • Bildirimde setLargeIcon() kullanılan büyük simge desteği. Bu genellikle sosyal uygulamaların bildirim kaynağı olan kişinin kişi fotoğrafını veya medya uygulamalarının bir albüm küçük resmini göstermesi içindir.
  • Durum çubuğu sohbet şeridinde setTicker() özelliğini kullanarak özel düzenler için destek.
  • Daha etkileşimli bildirim widget'ları için PendingIntent içeren düğmeler içeren ö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 verileri dinamik olarak 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 verilerde bunu yapmanıza yardımcı olmak için özel olarak tasarlanmıştır.

Tek yapmanız gereken, yeni bir yükleyici istendiğinde veya veriler değiştiğinde geri çağırma almak için LoaderCallbacks arayüzünü uygulamak, ardından etkinliğiniz veya parçanız için yükleyiciyi başlatmak amacıyla initLoader() yöntemini çağırmaktır.

Daha fazla bilgi için Yükleyiciler dokümanlarını okuyun. Ayrıca, LoaderCursor ve LoaderThrottle örneklerindeki yükleyicileri kullanan örnek kod da görebilirsiniz.

Bluetooth A2DP ve mikrofonlu kulaklık API'leri

Android artık bağlı Bluetooth A2DP ve mikrofonlu kulaklık profili cihazlarının durumunu doğrulamak için uygulamalar için API'ler içerir. Örneğin, uygulamalar, müzik dinlemek için bir Bluetooth mikrofonlu kulaklığın ne zaman bağlandığını belirleyebilir ve kullanıcıya gerektiği şekilde bildirim gönderebilir. Uygulamalar ayrıca satıcıya özgü AT komutları için yayın alabilir ve kullanıcıya bağlı cihazın durumu (örneğin, bağlı cihazın pilinin düşük olduğu zamanlar) hakkında bildirim gönderebilir.

Bluetooth istemcisi bağlandığında veya bağlantısı kesildiğinde geri aramaları almak için A2DP veya HEADSET profili sabitiyle getProfileProxy() ve bir BluetoothProfile.ServiceListener çağrısı yaparak ilgili BluetoothProfile değerini başlatabilirsiniz.

Animasyon çerçevesi

Yepyeni esnek animasyon çerçevesi, herhangi bir nesnenin (Görünüm, Çekilebilir, Parça, Nesne veya başka her şey) rastgele özelliklerini canlandırmanızı sağlar. Bir animasyonun çeşitli yönlerini tanımlamanıza olanak tanır. Örneğin:

  • Süre
  • Tekrarlama miktarı ve davranışı
  • Zaman interpolasyonu türü
  • Animatör, animasyonları birlikte, sırayla veya belirtilen gecikmelerden sonra oynatacak şekilde ayarlanır
  • Çerçeve yenileme gecikmesi

Bir nesnenin int, kayan ve onaltılık renk değerleri için varsayılan olarak bu animasyon özelliklerini ve diğer özellikleri tanımlayabilirsiniz. Yani bir nesnenin bu türlerden birinde özellik alanı olduğunda, bir animasyonu etkilemek için zamanla 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üre ait değerlerin nasıl hesaplanacağını bildirirsiniz.

Bir mülkün değerlerini canlandırmak için kullanabileceğiniz iki animatör vardır: ValueAnimator ve ObjectAnimator. ValueAnimator, animasyon değerlerini hesaplar ancak sonuç olarak canlandırılan 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 için nesne ile özelliği ayarlamanıza olanak tanır ve tüm animasyon işlerini yönetir. Yani ObjectAnimator öğesine animasyon için nesneyi, nesnenin zamanla değişecek olan özelliğini ve zaman içinde bu ö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 herhangi bir ViewGroup nesnesinde bu nesneyi 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 öğesinde setAnimator() çağrısı yapı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 bir ListView veya GridView öğesinden birden fazla öğe seçmesine olanak tanır. İşlem Çubuğu ile birlikte kullanıldığında kullanıcılar birden fazla öğe seçebilir ve ardından İşlem Çubuğu'ndaki seçenekler listesinden (Çoktan Seçmeli İşlem Modu'na dönüştürülmüştür) arasından gerçekleştirilecek işlemi seçebilir.

    Çoktan seçmeli seçimi etkinleştirmek için setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) numaralı telefonu arayın ve setMultiChoiceModeListener() ile bir MultiChoiceModeListener kaydı yapın.

    Kullanıcı bir öğeye uzun bastığında İşlem Çubuğu Çok Seçenekli İşlem Modu'na geçer. Öğeler seçildiğinde sistem onItemCheckedStateChanged() yöntemini çağırarak MultiChoiceModeListener öğesini bilgilendirir.

    Çoklu seçimle ilgili bir örnek 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 yapılabilir.

    Görünüm özelliklerini ayarlamak için yeni yöntemler şunları içerir: 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çevesi (yukarıda açıklanmıştır) ile birlikte kullanarak görünümlerinize bazı süslü animasyonları kolayca uygulayabilirsiniz. Örneğin, bir görünümü y ekseninde döndürmek için ObjectAnimator değerini View, "rotationY" özelliği ve başlangıç ile 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ı kullanmaya başladı. Sistem yeni temayı standart stil ve tema sistemini kullanarak uygular.

    Android 3.0 platformunu hedefleyen tüm uygulamalar (android:minSdkVersion veya android:targetSdkVersion değerini "11" olarak ayarlayarak) holografik temayı varsayılan olarak 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.

    Hologik temayı tek tek etkinliklere uygulamak veya kendi tema tanımlarınızda devralmak 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

      Kendine eklenmiş iki veya daha fazla görünüm arasında animasyon yapan basit ViewAnimator. Aynı anda yalnızca bir çocuk gösterilir. İstenirse düzenli aralıklarla otomatik olarak her alt öğe arasında geçiş yapabilir.

    • CalendarView

      Kullanıcıların bir takvimden tarih seçmesine olanak tanımak için tarihe dokunabilir ve takvimi kaydırarak veya istenen tarihe kadar kaydırabilirler. Widget'ta bulunan tarih aralığını yapılandırabilirsiniz.

    • ListPopupWindow

      Kendisini bir ana makine görünümüne sabitler ve bir EditText görünümüne girerken öneri listesi gibi bir seçenek listesi görüntüler.

    • NumberPicker

      Kullanıcının önceden tanımlanmış bir aralıktan sayı seçebilmesini sağlar. Widget'ta bir giriş alanı ile sayı seçmek için yukarı ve aşağı düğmeleri bulunur. Giriş alanına dokunulduğunda, kullanıcı değerler arasında gezinebilir veya geçerli 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ı pop-up pencerede bir Menu görüntüler. Pop-up, yer varsa sabit görünümünün altında, yoksa üzerinde görünür. IME (yazılım klavyesi) görünürse kullanıcı menüye dokununcaya kadar pop-up, IME'nin üstünü örtmez.

    • SearchView

      Arama sorgularını belirli bir etkinliğe sunmak 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ğu'nda bir arama widget'ı sunmak için 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, bunları rolodex gibi kaydırarak görünümler arasında dolaşmalarına olanak tanıyan bir görünüm.

Görseller

  • Donanım hızlandırmalı 2D grafikler

    Artık manifest öğenizin <application> öğesinde veya ayrı <activity> öğeleri için android:hardwareAccelerated="true" ayarlayarak uygulamanız için OpenGL oluşturucuyu etkinleştirebilirsiniz.

    Bu işaret, uygulamaların daha hızlı çizim yapmasını sağlayarak yardımcı olur. Bu sayede daha yumuşak animasyonlar, daha akıcı kaydırmalar ve genel olarak daha iyi performans ile kullanıcı etkileşimine yanıt sağlanır.

  • Donanım ve yazılım katmanları için desteği görüntüleyin

    Varsayılan olarak, bir View 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ı ile desteklenmesini belirtebilirsiniz.

    Bir donanım katmanı, donanıma özel bir dokuyla (genellikle Çerçeve Arabellek Nesneleri veya OpenGL donanımında FBO) desteklenir ve görünümün Android'in donanım oluşturma ardışık düzeni kullanılarak oluşturulmasına neden olur (ancak yalnızca görünüm hiyerarşisi için donanım hızlandırma etkin olduğunda). 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 etkin olsa bile görünümün Android'in yazılım oluşturma ardışık düzeni kullanılarak 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üncelleme, yazılım katmanının yeniden oluşturulmasını gerektirir. Bu durum, potansiyel olarak yavaş olabilir.

    Daha fazla bilgi için LAYER_TYPE_HARDWARE ve LAYER_TYPE_SOFTWARE dokümanlarına bakın.

  • Renderscript 3D grafik motoru

    Renderscript, hem 3D sahneler oluşturmak için bir API hem de maksimum performans için platformdan bağımsız özel bir gölgelendirici dil sağlayan, ç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 yakalanması gereken hızı belirler.

  • 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 kameradan kare önizleme çizmek için kullanılacak SurfaceTexture belirleyebilirsiniz.

  • HTTP Canlı yayını

    Uygulamalar artık HTTP Canlı yayın 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ı yayın spesifikasyonunun çoğunu destekler. Daha fazla bilgi için Desteklenen Medya Biçimleri dokümanına bakın.

  • EXIF verileri

    ExifInterface içinde fotoğraf diyafram açıklığı, ISO ve pozlama süresi için yeni alanlar bulunur.

  • 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) desteği bulunur. Bu sayede kullanıcılar her türlü medya dosyasını cihazlar arasında bir ana bilgisayara kolayca aktarabilir. Geliştiriciler, kullanıcıların cihazlar arasında aktarmak veya paylaşmak isteyebilecekleri rich media dosyaları 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 yeni genişletilebilir dijital haklar yönetimi (DRM) çerçevesi. İki mimari katmanda uygulanı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 işlemek üzere DRM eklentileri için bir arayüz gösteren yerel bir kod DRM yöneticisi.

    Uygulama geliştiriciler için bu çerçeve, korunan içeriğin yönetimini basitleştiren soyut ve 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 moduna olanak tanır.

    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ı güvenli bir şekilde uygulamak amacıyla Android sistemine tercih edilen bir DRM şeması için destek ekleme yöntemi sunar.

    Önizleme sürümü, dijital hakların kontrol edilmesi ve uygulanması için yerel DRM eklentileri 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ü tarzı klavyeler için destek. getKeyboardType() sorgusunu sorgulayıp KeyCharacterMap.FULL komutunu kontrol ederek önemli etkinliklerin tam 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ç özelliklerini desteklemektedir. Ayrıca PageUp/PageDown, Home/End ve klavye tabanlı metin seçimini destekler.
  • KeyEvent, anahtar değiştiricinin durumunu doğru ve tutarlı bir şekilde kontrol etmeyi kolaylaştırmak için çeşitli yeni yöntemler ekler. Daha fazla bilgiyi hasModifiers(int), hasNoModifiers(), metaStateHasModifiers(), metaStateHasNoModifiers() adresinde bulabilirsiniz.
  • Uygulamalar, Activity, Dialog ve View alt sınıflandırmalarını yaparak ve onKeyShortcut() uygulayarak özel klavye kısayolları uygulayabilir. Bir anahtar, Control tuşuyla birleştirildiğinde çerçeve bu yöntemi çağırır. Bir Seçenekler Menüsü oluştururken, her bir <item> öğesi (veya setShortcut()) için 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, giriş testi için önemli etkinliklerin sentezlenmesinde yararlı olan, masaüstü tarzı bir ABD tuş eşlemesi bulunur.

Bölünmüş dokunma etkinlikleri

Daha önce, dokunma etkinliklerini aynı anda yalnızca bir görünüm 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ölme etkinlikleri varsayılan olarak etkinleştirilir. Yani uygulama, android:minSdkVersion veya android:targetSdkVersion özelliğinin değerini "11" olarak ayarladığında.

Bununla birlikte, aşağıdaki özellikler, belirli görünüm gruplarındaki görünümler ve pencerelerde 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 stili özelliği, bir etkinlik temasına veya uygulamanın tamamına uygulayarak dokunma etkinliklerini pencereler arasında 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, pencerelerde dokunma etkinlikleri devre dışı bırakıldığında sistem çubuğu dokunma etkinliklerini bu etkinlikle aynı anda alamaz. Bu durum, etkinlik içindeki görünümlerin dokunma etkinliklerini bölüp bölemeyeceğ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ını kullanın.
  • Yeni WebSettings yöntemleri:
    • setDisplayZoomControls() hem ekrandaki yakınlaştırma kontrollerini gizlemenize hem de kullanıcının parmak hareketleriyle yakınlaştırma yapmasına izin vermenizi sağlar (setBuiltInZoomControls() ayarlanmalıdır true).
    • Yeni WebSettings yöntemi (setEnableSmoothTransition()), kaydırma ve yakınlaştırma sırasında yumuşak geçişler yapmanızı sağlar. Etkinleştirildiğinde Web Görünümü, 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:
    • Web Görünümü gizlendiğinde web görünümüyle ilişkilendirilmiş tüm işlemleri duraklatmak için onPause() geri çağırması sunulur. 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şlemeyi devam ettirmek için onResume() geri çağırması.
    • saveWebArchive(), geçerli görünümü cihaza web arşivi olarak kaydetmenize olanak tanır.
    • showFindDialog() mevcut 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 Medya Yakalama özelliğinde 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 giriş sağlar:

    <input type="file" accept="image/*;capture=camera" />
    

    Kullanıcı, capture=camera parametresini hariç tutarak kamerayla yeni bir fotoğraf çekmeyi veya cihazdan bir fotoğraf (Galeri uygulamasından gibi) 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 de 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 ve "devicemotion" etkinlik türünü kaydederek hareket etkinliklerine kaydolabilir.

  • 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, bellekteki bir dokümanı değiştiren org.json sınıflarını tamamlar.

Oluşturucu yöntemini çağırarak ve JSON dizesini besleyen InputStreamReader parametresini ileterek JsonReader örneği oluşturabilirsiniz. Ardından, beginObject() yöntemini çağırarak bir nesneyi okumaya başlayın, nextName() ile bir anahtar adını okuyun, nextString() ve nextInt() gibi türe bağlı yöntemler kullanarak değeri okuyun ve hasNext() doğru olduğunda bunu yapmaya devam edin.

JsonWriter öğesinin bir örneğini, oluşturucusunu çağırarak ve uygun OutputStreamWriter değerini ileterek oluşturabilirsiniz. Ardından, JSON verilerini okuyucuya benzer ş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, kabul ettikleri şeylerde daha serbest davranmalarını sağlar. Bu esnek ayrıştırma modu, org.json ürününün 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 tüzel kişilere (Google Play gibi) 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 sabitleri 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ş sistemi sağlar. Bu tür giriş sistemlerine örnek olarak ekrandaki imleci çalıştıran bir fare ya da uzaktan kumanda verilebilir. Bu tür giriş sistemleri; aşağı tıklama, yukarı tıklama ve sürükleme gibi temel dokunma etkinliklerini destekler. Ancak, daha karmaşık giriş türleri (ör. hareketler, kısa sallamalar vb.) sahte dokunmatik cihazlarda daha zor veya imkansız olabilir (ve çok noktalı hareketler kesinlikle mümkün değildir).

    Uygulamanız karmaşık hareketler gerektirmiyorsa ve uygulamanızın, emüle edilmiş dokunmatik ekranlı cihazlardan filtrelenmesini istemiyorsanız "android.hardware.faketouch" öğesini bir <uses-feature> öğesiyle bildirmeniz gerekir. Bu şekilde, uygulamanız yalnızca emüle edilmiş dokunmatik ekran girişi sağlayanlar da dahil olmak üzere mümkün olan en fazla sayıda cihaz türü tarafından kullanılabilir.

    Dokunmatik ekran özellikleri, sahte dokunma özelliklerinin bir üst kümesi olduğundan 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 bir uygulaması için <service> manifest öğesinde gerekli 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 şöyle görünebilir:

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />
    

Yeni platform teknolojileri

  • Depolama
    • Yerleşik eMMC depolama alanı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
    • 2.6.36 sürümüne yükseltildi
  • Dalvik sanal makinesi
    • SMP için destek ve optimizasyon sağlayacak yeni kod
    • JIT altyapısında çeşitli iyileştirmeler
    • Çöp toplayıcıyla ilgili iyileştirmeler:
      • 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ı
    • Uygulama genelinde 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 Farklılıkları 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" olarak adlandırılan bu tanımlayıcı, sistemin, uygulamayı yüklemeden önce uygulamanın 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, uygulama manifestindeki <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?