2016-02-12 10 views
9

düzenlerinde XML etiketi nedir Bu View sınıfı değil). buna class özelliğine göre özel bir görünüm oluşturması gerektiğini belirten <fragment/> etiketi gibi çalışır, ama neden o sadece yazabilirsiniz bu notasyonu kullanantasarım kütüphanesinden Snackbar kaynak kodunu okurken bu <a href="https://github.com/android/platform_frameworks_support/blob/master/design/res/layout/design_layout_snackbar.xml">sort of XML layout</a> buldum

Benim ilk tahminim:

<android.support.design.widget.Snackbar.SnackbarLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     style="@style/Widget.Design.Snackbar" /> 

??

Çok teşekkür ederim.

+1

Bu, anlamanız için yeterli olur: http://developer.android.com/guide/topics/ui/custom-components.html#modifying –

cevap

7

Aslında ikisi de aynı. İlk xml buna doğrudan özel sınıf kullanarak ilan ediyor ikinci birinde (class özelliğinde tanımlanan) tip android.support.design.widget.Snackbar$SnackbarLayout bir görünüm

<view xmlns:android="http://schemas.android.com/apk/res/android" 
    class="android.support.design.widget.Snackbar$SnackbarLayout" 

olacağını söylüyor.

İkinci biçim Özel görünüm iç sınıfa

From Android Documentation

Biz şimdi bizim özel bir bileşen vardır

olarak tanımlı değilse sadece kullanılabilir, ancak bunu nasıl kullanabiliriz? NotePad örneğinde, özel bileşen doğrudan bildirim düzeninden kullanılır, bu nedenle res/layout klasöründe note_editor.xml dosyasına bir göz atın.

<view 
    class="com.android.notepad.NoteEditor$MyEditText" 
    id="@+id/note" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@android:drawable/empty" 
    android:padding="10dip" 
    android:scrollbars="vertical" 
    android:fadingEdge="vertical" /> 

özel bileşen XML genel görünüm olarak oluşturulur ve sınıf tam paket kullanılarak belirtilir. Ayrıca tanımladığımız iç sınıfın Java programlama dilinde iç sınıflara başvurmak için standart bir yol olan NoteEditor $ MyEditText notasyonu kullanılarak referans alındığını unutmayın.

Özel Görünüm bileşeniniz bir iç sınıf olarak tanımlanmadıysa, alternatif olarak, Görünüm bileşenini XML öğesi adıyla bildirebilir ve sınıf özelliğini hariç tutabilirsiniz. MyEditText sınıfı artık ayrı bir sınıf dosyası olduğunu

<com.android.notepad.MyEditText 
     id="@+id/note" 
     ... /> 

Uyarı: Örneğin. Sınıf NoteEditor sınıfında yuvalandığında, bu teknik çalışmayacaktır.

Tanımdaki diğer öznitelikler ve parametreler, özel bileşen yapıcısına iletilenler ve sonra EditText yapıcısına iletilir, böylece bir EditText görünümü için kullanacağınız aynı parametrelerdir. Kendi parametrelerinizi de eklemenin mümkün olduğunu ve bunun üzerine tekrar değineceğimizi unutmayın.

Ve hepsi bu kadar var. Kuşkusuz bu basit bir durumdur, ancak asıl nokta budur - özel bileşenler oluşturmak sadece ihtiyacınız olduğu kadar karmaşıktır.

Daha karmaşık bir bileşen, yöntemleri daha da geçersiz kılabilir ve özelliklerini ve davranışlarını önemli ölçüde özelleştirerek kendi yardımcı yöntemlerinden bazılarını tanıtabilir. Tek sınır hayal gücün ve yapman gereken şeye ihtiyacın var.

+0

Bu nedenle, her iki nota arasında kesinlikle teknik bir fark yok mu? – pdegand59

+0

Oh, evet bir fark var. cevabımı güncellemek. – Rohit5k2

+1

Oh doc referansı için teşekkürler. Eğlenceli bölüm: bir iç sınıf kullanarak özel bir Görünüm oluşturun. AS'nin XML düzenleme sürükle ve bırak arayüzünü kullanarak, yeni özel Görünümünüzü eklemeyi deneyin. AS, teknik olarak işe yaramayacak ikinci yöntemi kullanarak XML'de ekleyecektir. ^^ – pdegand59

İlgili konular