Kavramlar ve Jetpack Compose uygulaması
Android Studio, materyal simgeleri eklemenize ve Ölçeklenebilir Vektör Grafiği (SVG) ile Adobe Photoshop Belgesi (PSD) dosyalarını projenize drawable vektör kaynakları olarak içe aktarmanıza yardımcı olan Vector Asset Studio adlı bir araç içerir. Bit eşlemler yerine vektör çizilebilir öğeler kullanmak, aynı dosya farklı ekran yoğunlukları için yeniden boyutlandırıldığında görüntü kalitesinde kayıp yaşanmadığından APK'nızın boyutunu küçültür. Vektör çizilebilir öğeleri desteklemeyen Android'in eski sürümlerinde, Vector Asset Studio, derleme sırasında vektör çizilebilir öğelerinizi her ekran yoğunluğu için farklı bit eşlem boyutlarına dönüştürebilir.
Vector Asset Studio hakkında
Vector Asset Studio, projeye resmi açıklayan bir XML dosyası olarak vektör grafik ekler. Tek bir XML dosyasını korumak, çeşitli çözünürlüklerdeki birden fazla raster grafiği güncellemekten daha kolay olabilir.
Android 4.4 (API düzeyi 20) ve önceki sürümlerde vektör çizilebilir öğeler desteklenmez. Minimum API düzeyiniz bu API düzeylerinden birine ayarlanmışsa Vector Asset Studio'yu kullanırken iki seçeneğiniz vardır: Taşınabilir Ağ Grafiği (PNG) dosyaları oluşturma (varsayılan) veya AndroidX'te geriye dönük uyumluluk tekniğini kullanma.
Vector Asset Studio, geriye dönük uyumluluk için drawable vektör öğesinin raster görüntülerini oluşturur. Vektör ve raster çizilebilir öğeler, APK'da birlikte paketlenir. Java kodunda vektör çizilebilir öğelerini Drawable, XML kodunda ise @drawable olarak adlandırabilirsiniz. Uygulamanız çalıştığında, API düzeyine bağlı olarak ilgili vektör veya raster resim otomatik olarak gösterilir.
AndroidX'te geriye dönük uyumluluk
Bu teknik için AndroidX 1.0 veya sonraki bir sürüm ve Gradle için Android eklentisinin 3.2 veya sonraki bir sürümü gerekir. Ayrıca yalnızca vektör çizilebilir öğeler kullanılır. AndroidX'teki
VectorDrawableCompat sınıfı, Android 2.1 (API düzeyi 7) ve sonraki sürümlerde
VectorDrawable desteği sunmanıza olanak tanır.
Vector Asset Studio'yu kullanmadan önce build.gradle dosyanıza bir ifade eklemeniz gerekir:
Modern
android { defaultConfig { vectorDrawables.useSupportLibrary = true } } dependencies { implementation 'androidx.appcompat:appcompat:1.7.1' }
Kotlin
android { defaultConfig { vectorDrawables.useSupportLibrary = true } } dependencies { implementation("androidx.appcompat:appcompat:1.7.1") }
Ayrıca, geriye dönük uyumluluk için AndroidX kodlama tekniklerini kullanmanız gerekir. Örneğin, vektör çizilebilir öğeler için android:src özelliği yerine app:srcCompat özelliğini kullanabilirsiniz. Daha fazla bilgi için AndroidX sayfasına bakın.
Düzenlere drawable vektör ekleme
Bir düzen dosyasında, ImageButton, ImageView gibi simgeyle ilgili tüm widget'ları drawable vektör öğesine yönlendirecek şekilde ayarlayabilirsiniz.
Örneğin, aşağıdaki düzende bir düğmede gösterilen bir vektör çizilebilir öğesi gösterilmektedir:
Şekil 1. Bir düzendeki düğmede gösterilen drawable vektör.
Şekilde gösterildiği gibi, bir widget'ta vektör drawable göstermek için:
Bir proje açın ve bir vektör çizilebilir öğesi içe aktarın.
Bu örnekte, Yeni Proje Sihirbazı ile oluşturulan bir Telefon/Tablet projesi kullanılmaktadır.
Proje penceresinin Android görünümünde,
content_main.xmlgibi bir düzen XML dosyasını çift tıklayın.Tasarım sekmesini tıklayarak Layout Editor'ı görüntüleyin.
ImageButtonwidget'ını Palet penceresinden Layout Editor'a sürükleyin.Kaynaklar iletişim kutusunda, sol bölmede Drawable'ı, ardından içe aktardığınız vektör çizilebilir öğesini seçin. Tamam'ı tıklayın.
Drawable vektör, düzendeki
ImageButtonüzerinde görünür.Resmin rengini temada tanımlanan vurgu rengiyle değiştirmek için Özellikler penceresinde ton özelliğini bulun ve … seçeneğini tıklayın .
Kaynaklar iletişim kutusunda, sol bölmede Renk'i, ardından colorAccent'i seçin. Tamam'ı tıklayın.
Resmin rengi, düzendeki vurgu rengine dönüşür.
Proje AndroidX kullanıyorsa ImageButton kodu aşağıdaki gibi olmalıdır:
<ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/ic_build_black_24dp" tools:layout_editor_absoluteX="11dp" tools:layout_editor_absoluteY="225dp" android:id="@+id/imageButton" android:tint="@color/colorAccent" />
Projede AndroidX kullanılmıyorsa drawable vektör kodu android:src="@drawable/ic_build_black_24dp" olur.
Kodda drawable vektöre referans verme
Kodunuzda genellikle bir vektör çizilebilir kaynağı genel bir şekilde referans gösterebilirsiniz. Uygulamanız çalıştığında, API düzeyine bağlı olarak karşılık gelen vektör veya raster resim otomatik olarak gösterilir:
Çoğu durumda, XML kodunda vektör çizilebilir öğeleri
@drawable, Java kodunda iseDrawableolarak adlandırabilirsiniz.Örneğin, aşağıdaki düzen XML kodu, resmi bir görünüme uygular:
<ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/myimage" />
Aşağıdaki kod, resmi
Drawableolarak alır:Kotlin
val drawable = resources.getDrawable(R.drawable.myimage, theme)
Java
Resources res = getResources(); Drawable drawable = res.getDrawable(R.drawable.myimage, getTheme());
getResources()yöntemi, etkinlikler, parçalar, düzenler, görünümler vb. gibi kullanıcı arayüzü nesneleri için geçerli olanContextsınıfında bulunur.Uygulamanızda AndroidX kullanılıyorsa (
build.gradledosyanızdavectorDrawables.useSupportLibrary = trueifadesi olmasa bile)app:srcCompatifadesi içeren bir drawable vektör öğesine de başvurabilirsiniz. Örneğin:<ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" app:srcCompat="@drawable/myimage" />
Bazen, örneğin
VectorDrawablesınıfının belirli özelliklerini kullanmanız gerektiğinde, drawable kaynağı tam sınıfına dönüştürmeniz gerekebilir. Bunun için aşağıdaki gibi bir kod kullanabilirsiniz:Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { val vectorDrawable = drawable as VectorDrawable } else { val bitmapDrawable = drawable as BitmapDrawable }
Java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { VectorDrawable vectorDrawable = (VectorDrawable) drawable; } else { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; }
Drawable vektör kaynaklarına yalnızca ana iş parçacığından erişebilirsiniz.
Android 5.0 (API düzeyi 21) ve sonraki sürümlerde, AnimatedVectorDrawable sınıfının özelliklerini canlandırmak için VectorDrawable sınıfını kullanabilirsiniz. AndroidX ile Android 3.0 (API düzeyi 11) ve sonraki sürümlerde VectorDrawable sınıfını canlandırmak için AnimatedVectorDrawableCompat sınıfını kullanabilirsiniz. Daha fazla bilgi için Çizilebilir grafikleri animasyonlu hale getirme başlıklı makaleyi inceleyin.