Jetpack: Preferences Library
Merhaba arkadaşlar, bu mobi'de kullanıcının android uygulamamıza dair kişiselleştirilmiş ayarlarının Preference Library ile nasıl yönetilebileceğini ve Jetpack'in ne olduğunu açıklar nitelikte olacaktır.
Keyifle okumanız dileğiyle :)
Android Jetpack, bir Android uygulaması geliştirirken; test edilebilir, mimariye ayak uyduran ve geliştirme süremizi daha hızlı, daha stabil hale getiren paketler bütünüdür.
Bu bağlamda Jetpack içerisinde yer alan Data Binding ile layout üzerindeki view'leri bind edebilir, içerisine değerler atayabilirsiniz. Ayrıca bir başka Jetpack paketi olan Navigation Architechture ile tek Activity üzerinde fragmentlerin yer aldığı ve fragmentlerın yönetimini oldukça kolaylaştıran bir yapı kurabilirsiniz.
Jetpack'in en büyük faydası bir developer için verimliliği arttırmasıdır. Örneğin daha önce Camera 1 API(deprecated) ve Camera 2 API'lar ile bir kamera geliştirmeye kalktığınızda bu API'lar üzerinde ustalaşması oldukça güç bir durumdu. Ve işin içine cihaz kaynaklı uyumluluk sorunları girince (Samsung S6 Edge vs) içinden çıkılması güç bir hal alıyordu.
Fakat JetPack ile gelen Camera X ile artık bir kamera geliştirmek, bu kameradan görüntü analizleri almak oldukça stabil ve kolay bir hale geldi.
Bu sebeple Jetpack paketlerini kullanmak aslında bize daha mimariye dönük ve daha esnek bir perspektif çizmemize olanak tanıyor.
Preference Library Nedir?
Ayarlar ekranı, temelde geliştirdiğimiz bir Android uygulamasında kullanıcının uygulamaya dair kişisel deneyimlerini oluşturduğu bir sayfadır. Bir ayarlar ekranı oluşturduğumuzda kullanıcıdan uygulamayı kullanım tercihine dair bir çok bilgi alırız. Preference Library, bu ekran tasarımlarını yaparken içerisinde yer alan özel view'ler ile kullanıcı ayarlarını saklamayı kolaylaştıran bir Jetpack paketidir.
Ayarlar ekranı kullanıcılarımıza uygulamamıza dair özelleştirme imkanı sunar. Burada tema seçenekleri, kullanıcı deneyimi ayarları, gizlilik politikası ve açık kaynak lisanslarımızdan bahsedebiliriz. Örneğin bir push notification servisi olarak OneSignal’i tercih ettiğinizde, Notification Channel’ları oluşturmadığımızdan hangi bildirimlerin tercih edileceğine dair verileri yine ayarlar sayfamızda bulundurabiliriz. Ayarlar ile ilgili bir özellik kullanmak istediğimizde bu ekranın bir layout olarak tasarlanmasına ihtiyaç duyarız. Devamında tasarlanan ekrana, kullanıcının seçtiği ayar setlerine göre datanın doldurulması mantığını kurmalıyız. Bu çok fazla atık kodun (boiler plate) oluşmasına neden olacaktır. Neyse ki JetPack ile gelen Preference Library tüm bunları kendi yapısı içerisine alarak bizi büyük bir yükten kurtarıyor.
Preference Library kullandığınızda bir layout olarak ekran tasarlamanıza ve bu ekranlarda kullanıcının daha önceki ayarlarına dair bilgi tutmanıza gerek kalmıyor. Tüm bunları Preference Library’e özel xml tag’leri ve attribute’leri ile hazırlayabilirsiniz.
Şimdi bu özelliklerin nasıl kullanıldığını ve neleri kolaylaştırdığını kavramak için Preference Library'e yakından bakalım. Başlamadan önce Preference Library'nin güncel sürümünü projeye dahil etmelisiniz.
Şu an ki en güncel versiyon: implementation 'androidx.preference:preference:1.1.0'
Preferences Library ile Ayarlar Ekranı
Preferences Library’e dahil bir ayarlar ekranı oluşturmak istediğinizde bunun iki yolu karşınıza çıkıyor: Programlamatik olarak ya da XML üzerinden. Ayarlar ekranını bir XML aracılığıyla oluşturacaksak uygulamanın res/xml dizinine yeni bir PreferenceScreen kaynağı oluşturarak başlamalıyız. Bu sayede ekranda göstermek isteyeceğimiz tercih ayarlarını sağlayabiliriz.
Temel olarak bir Preferences XML Tag'ini ele alacak olursak; aşağıdaki kod bloğu ile başlık, açıklama ve yönleneceği adresi içeren bir ayarlar öğesi oluşturmuş oluyoruz.
Burada yer alan 3 özelliği fark edeceksiniz:
fragment -> Yönleneceği fragment classını temsil eder.
title -> Bahsedilen ayar ile ilgili başlık bilgisidir.
key -> Her ayar için varsayılan bir SharedPreferences dosyasına key-value şeklinde seçilen ayar değerleri kaydedilir.
Ve tüm bunlar ekranda gösterildiğinde şuna benzer bir görüntü oluşacaktır.
Eğer bu görünümü XML dışında kod üzerinden elde etmek istersek aşağıdaki gibi bir kod bloğu oluşturmalıyız.
Ayarlar yazı tipinde stil özellikleri kullanmak istediğinizde string'inize <b></b> <i></i> gibi html tagleri ekleyerek aşağıdaki gibi stilize edebilirsiniz.
Bir icon eklemek isediğinizde;
icon -> Ayarlarınıza icon eklemenizi sağlar.
Başlığınızın taşmasını istemediğiniz durumda;
singleLineTitle -> true olarak tanımlandığında başlığın tek satır olarak kalmasını ve taştığı durumda "... " şeklinde devam etmesini sağlar.
Aynı ayar grubuna ait olan ayarlarınızı PreferenceCategory tag'i ile tanımladığınızda bir başlık ekleyerek gruplama yapabilirsiniz.
View Grupları için Preference Library
Preference Library'nin bana göre en iyi olduğu yer burası. Örneğin proje ayarlarınızda belli CheckBox grupları var. Bu viewler kullanıcı ayarlar sayfasına her gelindiğinde, kullanıcının kişiselleştirdiği şekilde sunulmalı. Bunu gerçekleştirebilmek için; bilgileri SharedPreferences üzerinde tutabilir, local database üzerinde kontrol edebilir ya da bir backend servis ile kontrol edip verileri aktarmamız gerekirdi. Oysa Preferences Library ile bir attribute olarak belirttiğimiz key sayesinde bunu Preferences Library halleder.
View Grupları için temel preference view'ları;
Dialog Grupları için Preference Library
Preference Library aynı zamanda kullanıcının giriş yapabileceği özellikler de sunar. Kullanıcıdan bilgi almak istediğiniz durumda EditTextPreference eklediğinizde bir dialog penceresi ile kullanıcının giriş yapabileceği değerleri tutabilmeniz mümkün. Preference Library bununla beraber 2 tane daha dialog içeren ayar ekranı sunuyor. ListPreference ile bir listeden herhangi bir ayarı seçebilir ya da MultiSelectListPreference ile kullanıcıya çoklu seçim yapma şansı sunabilirsiniz.
Buna dair bir tasarım yapmak istediğinizde aşağıda ki gibi bir xml kodu üretmeniz gerekmektedir.
Temel Dialog Grubu Özellikleri;
dialogTitle –> Dialog için görüntülenecek başlık.
dialogMessage –> Dialog için kullanılacak mesaj.
dialogIcon –> Dialog için bir icon tanımı.
dialogLayoutResource –> Özel tanımladığınız bir layout için düzen.
Bu yazı ile birlikte Preference Library nasıl kullanabileceğimizi öğrendik. Preferences API ayar sayfalarıyla ilgili geliştirme sürecini daha kolay bir hale getirmeyi amaçlıyor. Daha fazla bilgi almak için teknik dökümanı incelemek isterseniz;
#android #jetpack #preferencelibrary #kotlin #googleio