2016-02-12 2 views
9

XMLタグとは何ですが、私はこのsort of XML layoutを見つけましたそれはViewクラスではありません)。それはclass属性に応じてカスタムビューを作成する必要があることを示す、<fragment/>タグのように動作しますが、なぜ彼はただ書くことができ、この表記法を使用することをはレイアウト

私の最初の推測では、次のとおりです。

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

を??

ありがとうございました

+1

これは理解するのに十分でしょうか?http://developer.android.com/guide/topics/ui/custom-components.html#modifying –

答えて

7

実際には両方が同じです。最初のXMLでは、それが直接、カスタムクラスを使用して宣言しています秒1で

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

classプロパティで定義されている)、それはタイプandroid.support.design.widget.Snackbar$SnackbarLayoutの観点であろうと述べています。カスタムビューは内部クラスとして定義されていない場合にのみ

第二形式は

From Android Documentation

使用することができ現在、当社のカスタムコンポーネントを持っているが、どのように我々はそれを使用することができますか? NotePadの例では、カスタムコンポーネントは宣言的なレイアウトから直接使用されるので、res/layoutフォルダのnote_editor.xmlを見てください。

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

カスタムコンポーネントは、XMLの汎用ビューとして作成され、クラスはフルパッケージを使用して指定されます。また、定義した内部クラスは、Javaプログラミング言語の内部クラスを参照する標準的な方法であるNoteEditor $ MyEditText表記を使用して参照されることにも注意してください。

カスタムViewコンポーネントが内部クラスとして定義されていない場合は、XML要素名でViewコンポーネントを宣言し、クラス属性を除外できます。たとえば、次のようにMyEditTextクラスは今、別のクラスファイルであることを

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

注意してください。クラスがNoteEditorクラスにネストされている場合、この手法は機能しません。

その他の属性とパラメータは、カスタムコンポーネントコンストラクタに渡され、EditTextコンストラクタに渡されるため、EditTextビューで使用するパラメータと同じです。独自のパラメータを追加することも可能であることに注意してください。これについては以下でもう一度触れます。

これだけです。確かにこれは単純なケースですが、それがポイントです。カスタムコンポーネントを作成することは、必要なだけ複雑になります。

もっと洗練されたコンポーネントは、さらに多くの... onメソッドをオーバーライドし、独自のヘルパーメソッドを導入し、そのプロパティと動作を実質的にカスタマイズします。唯一の制限はあなたの想像力と、コンポーネントに必要なものです。

+0

両方の表記には厳密に技術的な違いはありませんか? – pdegand59

+0

ああ、はい違いがあります。私の答えを更新する。 – Rohit5k2

+1

ドキュメントの参照をありがとう。楽しい部分は、内部クラスを使用してカスタムビューを作成することです。 ASのXML編集ドラッグ&ドロップインターフェイスを使用して、新しいカスタムビューを追加してみてください。 ASは、技術的にはうまくいかない2番目の方法を使用してXMLにXMLを追加します。 ^^ – pdegand59

関連する問題