2012-01-26 8 views
16

NinePatchDrawable'un daha az karmaşık bir sürümünü oluşturmak yerine iç panelleri döşemekle meşgul oluyorum.Özel bir Drawable oluşturun ve XML'de kullanın

Oluşturmayı ve benzeri işlemleri yapmak için gerçek mantığı uygulayabilirim. Ancak, bu Drawable XML dosyalarında nasıl kullanılacağı hakkında belge bulamıyorum. Mümkün mü? Yani, kaynakları tanımlamak için kullanabileceğim bir <tileable-nine-patch> veya benzeri bir etiket alabilir miyim?

cevap

25

Maalesef, olası güvenlik sorunları nedeniyle XML dosyalarında (API 23 ve aşağısı) özel çekilebilir objeleri kullanmak mümkün değildir. Android geliştiricilerinden biri olan Romain Guy'ın bir cevabı ile bu konuyla ilgili bir Google Grupları dizisi için here adresine bakın.

Yine de bunları Java kodunuzda kullanabilirsiniz.

Güncelleme: LeoFarage açıklamalarda işaret ettiği gibi

, API 24'te başlangıç ​​şimdi XML dosyalarında özel çekilebilir kullanmak ancak yalnızca başvuru paketinin içinde olabilir.

+1

[Çizilebilir] (https://developer.android.com/reference/android/graphics/drawable/Drawable.html) belgelerine göre: "_ API 24'te başlatma, özel çizim sınıfları XML dosyasında da kullanılabilir. ". Umarım bu özellik, Uyumluluk Kitaplığı'na eklenecek bir zaman meselesidir. – LeoFarage

+0

Bu özellik en azından API 9'dan beri IDE'de önizleme modunda istedim. Tüm stil için kod kullanmanın rahatı var, ancak önizleme o kadar harika olurdu. Bilgi için teşekkürler! – nekavally

0

Android API 24'ü başlatma, özel Drawables sınıfları yalnızca XML'inizde paketinizde kullanılabilir. XML öğesi adı olarak tam nitelikli sınıf adını kullanarak

:

Özel sınıfları farklı şekillerde XML kullanılabilir drawables. Bu yöntem için, özel çekilebilir sınıf, ortak bir üst düzey sınıf olmalıdır.

<com.yourapp.MyCustomDrawable 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#ffff0000"/> 

XML öğesi adı olarak çizilebilir ve sınıf niteliğinden tam nitelikli sınıf adı belirtilerek kullanılabilir. Bu yöntem, hem genel üst düzey sınıflar hem de genel statik iç sınıflar için kullanılabilir.

<drawable xmlns:android="http://schemas.android.com/apk/res/android" 
class="com.myapp.MyTopLevelClass$InnerCustomDrawable" 
android:color="#ffff0000" /> 

Not: destek kütüphanesi tarafından desteklenmemektedir.

+1

Üç soru: 1) Hangi XML dosyaları bu deklarasyonların koyulması/bulunması gerekiyor? Layouts, drawables, vb. Demek istiyorum. 2) API <24 üzerinde çalışan bir uygulamayla ne olur? 3) Örneklerinizde 'android: color' kullanmanın amacı nedir? –