SORU
23 NİSAN 2010, Cuma


Bir özel ilan android UI öğesi XML kullanarak

Nasıl Android UI öğesi XML kullanarak ilan muyum?

CEVAP
23 NİSAN 2010, Cuma


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.

LabelView.java

 TypedArray a=context.obtainStyledAttributes(attrs, R.styleable.LabelView);
 CharSequences=a.getString(R.styleable.LabelView_text);

attrs.xml

<declare-styleable name="LabelView">
    <attr name="text"format="string"/>
    <attr name="textColor"format="color"/>
    <attr name="textSize"format="dimension"/>
</declare-styleable>

custom_view_1.xml

<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"

Bağlantılar

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BuzzFeedVideo

    BuzzFeedVide

    10 AĞUSTOS 2011
  • steeletraining

    steeletraini

    28 NİSAN 2010
  • technodromeband's channel

    technodromeb

    28 NİSAN 2011