Bir özel ilan android UI öğesi XML kullanarak
Nasıl Android UI öğesi XML kullanarak ilan muyum?
CEVAP
Android Geliştirici Kılavuzu Bölüm Building Custom Components çağırdı. Ne yazık ki, the discussion of XML attributes tek düzen dosya içinde kontrol ilan eden ve aslında sınıf başlatma içindeki değerleri işleyen kapsar. Adımları aşağıdaki gibidir:
1. values\attrs.xml
öznitelikleri bildirmek
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyCustomView">
<attr name="android:text"/>
<attr name="android:textColor"/>
<attr name="extraInformation" format="string" />
</declare-styleable>
</resources>
declare-styleable
etiket niteliksiz bir isim kullanmaya dikkat edin. Standart dışı extraInformation
gibi android nitelikler türlerine ilan edilmesi gerekiyor. Etiketleri üst sınıf ilan redeclared olmak zorunda kalmadan, alt sınıflar için de geçerli olacak.
2. Kurucular oluÅŸturun
Başlatma için AttributeSet
kullanan iki kurucular olduğundan, uygun kurucular çağırmak için ayrı bir hazırlama yöntemi oluşturmak için.
private void init(AttributeSet attrs) {
TypedArray a=getContext().obtainStyledAttributes(
attrs,
R.styleable.MyCustomView);
//Use a
Log.i("test",a.getString(
R.styleable.MyCustomView_android_text));
Log.i("test","" a.getColor(
R.styleable.MyCustomView_android_textColor, Color.BLACK));
Log.i("test",a.getString(
R.styleable.MyCustomView_extraInformation));
//Don't forget this
a.recycle();
}
R.styleable.MyCustomView
her öğe bir öznitelik KİMLİĞİ nerede int[]
otomatik bir kaynaktır. Öznitelikleri öğe adı özniteliği adı ekleyerek XML her özellik için oluşturulur. Örneğin, R.styleable.MyCustomView_android_text
içerir MyCustomView
android_text
öznitelik. Nitelikler TypedArray
get
çeşitli fonksiyonları kullanılarak alınabilir. Eğer öznitelik XML tanımlı tanımlı değilse, o zaman null
döndürülür. Dışında, dönüş türü bu durumda ikinci bağımsız değişkeni, döndürülen bir ilkel ise, elbette.
Eğer tüm niteliklerini almak istiyorsanız eğer, bu dizi el ile oluşturun.Standart android nitelikler KİMLİĞİ de bu proje için nitelikler R.attr
iken android.R.attr
dahildir.
int attrsWanted[]=new int[]{android.R.attr.text, R.attr.textColor};
Lütfen unutmayındeğilandroid.R.styleable
, this thread göre gelecekte değiştirilebilir bir şey kullanın. Bir yerde bütün bu sabitler görüntülemek için faydalı olduğu gibi hala belgelerinde.
3. layout\main.xml
gibi bir düzen dosyalarını kullanabilirsiniz
xmlns:app="http://schemas.android.com/apk/res-auto"
üst seviye ad alanı bildirimi xml öğesi vardır. Ad bazen farklı şemalar aynı öğe adları (daha fazla bilgi için this article) kullanımı sırasında ortaya çıkan çatışmaları önlemek için bir yöntem sağlar. URL sadece benzersiz şemaları - nothing actually needs to be hosted at that URL tanımlama biçimidir. Eğer bu bir şey yapıyor görünüyor ama, aslında bir çatışmayı çözmek için gerekli olmadıkça, ad alanı önekini eklemek gerek yok çünkü.
<com.mycompany.projectname.MyCustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:text="Test text"
android:textColor="#FFFFFF"
app:extraInformation="My extra information"
/>
Referans özel Görünümü tam adını kullanarak.
Android LabelView Örnek
Eğer tam bir örnek istiyorsanız, android etiket görünümü de oldukça basit.
TypedArray a=context.obtainStyledAttributes(attrs, R.styleable.LabelView);
CharSequences=a.getString(R.styleable.LabelView_text);
<declare-styleable name="LabelView">
<attr name="text"format="string"/>
<attr name="textColor"format="color"/>
<attr name="textSize"format="dimension"/>
</declare-styleable>
<com.example.android.apis.view.LabelView
android:background="@drawable/blue"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:text="Blue" app:textSize="20dp"/>
Bu ad ile LinearLayout
bir öznitelik bilgiler: xmlns:app="http://schemas.android.com/apk/res-auto"
Özel bir yazı tipi kullanarak Android...
Nasıl bir Niyet kullanarak bir Android...
Android e-Posta gönderme varsayılan/ku...
Kullanarak " koyuyorsun;sayfa özel...
özel veri seçiciler jQuery HTML5 kulla...