UI Interface
7836 ワード
viewはデータ構造で、彼の属性はLAYOUTパラメータを記憶しています.内容は特定の矩形領域です.
この矩形領域で彼は自分のMEASUREMENT、LAYOUT、DRAWING、FOCUS CHANGE、SCROLLING、KEY/GESTUREを処理します.
Adapters
AdapterViewはVIEWGOUPの実現であり、ADAPTERオブジェクトに基づく彼のサブVIEWSを定義しています.
ADAPTERはあなたのデータソースとADAPTERVIEWの間の通信員のようです.
Declaring Layout
各LAYOUTファイルは必ず一本の要素、またはVIEW、またはVIEWGROUPでなければなりません.
各VIEWGROUTは、View Group.LayoutParaamsからの特定のクラスを継承することを実現しました.
例えばLINEARLAYA OUTはRELATIVERYOUTと他のいくつかのVIEWを含んでいます.RELATIVERYOUTはまたいくつかのVIEWを含んでいます.
RELATIVERYOUTを定義するLAYOUTパラメータは、LINEARLAUT.LAYOUT PARDS、RELATIVE LAYOUTの中の
子供はRELAVTIVE LAYOUT.LAYOUT PARSAMSを使うべきです.
一つのVIEWは実際に二つのグループの幅が高いです.
第一組はmeasred width and meass red heightという二つのサイズが彼の父親の中でどれぐらい大きいかを決めました.The meass red dimensions can be obtained by caling getMeass redWidth()and get Meass redHeight()
第二組のwidth and heightもdrawing width and drawing heightと呼ばれ、このグループはVIEWのスクリーン上の実際のサイズを定義しています.get Width and get Height()
この二つのグループは違うかもしれません.
VIEWサイズを測定する時も、彼のPADDING、Padding can be used to offset the content of the view by a specific amount of pixels.For instance、a left padding of 2 will push the view's content by 2 pixels the ft.
しかしVIEWはMARGINを提供していませんが、VIEWGROUTPは提供しています.
Handling UI Events
ONKEY From View.OnKeyListenerは、ユーザがVIEWに焦点を当てて、キーを押すか、またはリリースするように呼び出される.
OTOUCH From View.OnTouch Listenerを押すとき、リリースするとき、または任意の動きのジェスチャー動作が画面上にあります.
This is cared when a Conteext Menu is being built(as the relt of a sustained「long click」)
TOUCHモードに入ると、is Focusable Intouch Mode()is true will be focusable、such as text edgetsだけがあります.
他のBUTONはTAKE FOCUSにはなりません.彼らは簡単に彼らのOCLICKをアクティブにします.
TOUCH MODEはシステム全体(すべてのWINDOWS、ACT)によって維持され、現在の状態を調べるためにcall isInTouch Mode()to see whether the device is currently in touch mode.
VIEWは、
TOUCH MODEのallows focus with
もしVIEWがFOUCSを獲得できないなら、申明時にadd the
You can also declare a View as focusable while in Touch Mode with
Bulilding Custom Components
1.VIEWを継承し、立体関数を充填し、ここで属性パラメータをXMLから取得できます.
ほぼ確実にOMEASUREをカバーします.ONSDRAWをカバーする必要があるかもしれません.もしSHOWの何かを考えたら.
デフォルトのONSDRAWは何もしません.OMEASUREは100*100サイズを差し上げます.
他にもいくつかのONがあります.カバーが必要です.
あなたのVIEWのOMEASUREは、measrement width and heightを計算します.この二つのサイズはVIEWを表示するために使われます.
サイズはパラメータ(
もしそれを超えたら、PARTはincluding clipping、scrolling、throwing an exception、or asking the
Onese the width and height are cacalculated,the
The custom View is defined in the LabelView class.
compund componentを作成します.
1.統合LAYOUTのクラスを作って、コンボボックスを例にとって、私はLINEARLAYA OUTで水平方向のを持っています.
もちろん、LAYOUTを入れ子して、任意の複雑な部品を作ってもいいです.XMLを説明する方式で、含まれている部品を作成したり、コードを作成したりできます.
2.コンストラクタでSUPERコンストラクタを呼び出して、ここでEditText field and the PopListを作成できます.
注意してください.XMLでは自分の属性パラメータを導入しているかもしれません.ここで入手できます.
3.いくつかの事件を作成し、彼が含むVIEWとして聞き込みます.
4.自分の属性のためにアクセスを作成することができます.例えばEDIETEXT値が設定されます.
5,もしLAYOUTを継承したら、
The cores ponding classis in the sample code are
(カスタムVIEWがinflated from an XML layout fileであれば、パラメータ付きのコンストラクタ(Contect context,AttributeSet atrs)が呼び出されます.
あなたのコンストラクタではSUPERを呼び出すことを覚えておいてください.
どうカスタマイズしたVIEWを使いますか?ここに一つの例があります.
ACTがフォーカスを受けると、このLAYOUTのツリーレベルのルートノードから描き始める.
木に沿って、上から下まで、すべてのGROUTPは彼の子供に自分を描くようにお願いします.(DRAWを通じて)
父はいつも最初に描いて、そして兄弟です.
LAYOUTを描くには二つの過程があります.MEASURE、LAYOUT
MEASUREプロセスもまた、トップダウンプロセスである.implemented in
各VIEWは、この再帰プロセスにおいてサイズ仕様を推進し、MEASUREが終了すると、各VIEWは彼のMEASUREMENTSを記憶している.
LAYOUTも同じように、トップダウンしています.この過程で、各PARDENTが彼の子供の位置付けを担当しています.MEASUREプロセスで計算したサイズです.
When a View's
MEASUREプロセスは、2つのクラスで通信し、DIMENSIONSに行く.
The View.Meass respec class is used by View to tell their parents how they want to be meass red and positiond.The base LayoutParams class just describes how big the View to for both width and height.
For each dimension,it can specify one of: an exact number FILLUPART,which means the View Wants to be as bits parent(minus padding) WRAPuCONTENT,which means that the View wants to be just big enough to enclose its content. Meass reSpecs are used to pussh requirements down the tree from parent to child.A Meass reSpec can be in one of three modes:
ACTが彼のコンテンツを表示し始めると、まずルートノードVIEWGROUTPから開始する.
VIEWGROUTを描くということはMEASURE、LAYOUTを使って彼のサブVIEWを測定します.この過程は終わりました.
VIEWGROUTPが呼び出されます.
dispatchDraw、そして順番にVIEWのDRAWを呼び出します.
VIEWGROUP:OMEASURE-->ONSLAYOUT-->DISPATCHDRAW--> VIEW'S ONSDRAW.
view groupでは自分が描かれるのを防ぐためのマークを設定しました.LAYOUT自体は絵を描く必要がないので、あなたもこのマークを設定できます.
だからiewgroupを継承してODRAWを実現して、役に立ちません.
...
Usually,a View Group cars mease()on its children from its own Measre()method.Simillarly,you must cal the layout()method of the children from Layout()
Note that for performance reasons,oneMeasre()is not necessarlycall evertime me me asre()iscaled.The view ssstem tries to smart and will invokeonMease()only when View Alewhave might have changed changed bodbobobodboboboboboboboddddbobobobobobobobobobods.inininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininis caled on a View,onLayout()will also be caled.
Last but not least,drawing is a bit different.At drawing time,View Group will enter the draw()method and instead of going through onDraw(),it will invoke dispatDraw(),hich will will in turn.carn.
この矩形領域で彼は自分のMEASUREMENT、LAYOUT、DRAWING、FOCUS CHANGE、SCROLLING、KEY/GESTUREを処理します.
Adapters
AdapterViewはVIEWGOUPの実現であり、ADAPTERオブジェクトに基づく彼のサブVIEWSを定義しています.
ADAPTERはあなたのデータソースとADAPTERVIEWの間の通信員のようです.
Declaring Layout
各LAYOUTファイルは必ず一本の要素、またはVIEW、またはVIEWGROUPでなければなりません.
各VIEWGROUTは、View Group.LayoutParaamsからの特定のクラスを継承することを実現しました.
例えばLINEARLAYA OUTはRELATIVERYOUTと他のいくつかのVIEWを含んでいます.RELATIVERYOUTはまたいくつかのVIEWを含んでいます.
RELATIVERYOUTを定義するLAYOUTパラメータは、LINEARLAUT.LAYOUT PARDS、RELATIVE LAYOUTの中の
子供はRELAVTIVE LAYOUT.LAYOUT PARSAMSを使うべきです.
一つのVIEWは実際に二つのグループの幅が高いです.
第一組はmeasred width and meass red heightという二つのサイズが彼の父親の中でどれぐらい大きいかを決めました.The meass red dimensions can be obtained by caling getMeass redWidth()and get Meass redHeight()
第二組のwidth and heightもdrawing width and drawing heightと呼ばれ、このグループはVIEWのスクリーン上の実際のサイズを定義しています.get Width and get Height()
この二つのグループは違うかもしれません.
VIEWサイズを測定する時も、彼のPADDING、Padding can be used to offset the content of the view by a specific amount of pixels.For instance、a left padding of 2 will push the view's content by 2 pixels the ft.
しかしVIEWはMARGINを提供していませんが、VIEWGROUTPは提供しています.
Handling UI Events
ONKEY From View.OnKeyListenerは、ユーザがVIEWに焦点を当てて、キーを押すか、またはリリースするように呼び出される.
OTOUCH From View.OnTouch Listenerを押すとき、リリースするとき、または任意の動きのジェスチャー動作が画面上にあります.
onCreateContextMenu()
From View.OneCreateConteext MenuListenerThis is cared when a Conteext Menu is being built(as the relt of a sustained「long click」)
Activity.dispatchTouchEvent(MotionEvent)
-This allows your Activity to intercept all touch events before they are dispatched to the window.ViewGroup.onInterceptTouchEvent(MotionEvent)
-This allows a View Group to watch events as they are dispatched to child View.ViewParent.requestDisallowInterceptTouchEvent(boolean)
-Call this up on a parent View to indicate that it Shoult not intercept touch events onInterceptTouchEvent(MotionEvent)
.他のBUTONはTAKE FOCUSにはなりません.彼らは簡単に彼らのOCLICKをアクティブにします.
TOUCH MODEはシステム全体(すべてのWINDOWS、ACT)によって維持され、現在の状態を調べるためにcall isInTouch Mode()to see whether the device is currently in touch mode.
VIEWは、
isFocusable()
を通じて、彼がフォーカスコールsetFocusable()
.エリアの変更を喜んで受けるかどうかを指摘しても良い.TOUCH MODEのallows focus with
isFocusableInTouchMode()
.You can change this with setFocusableInTouchMode()
.もしVIEWがFOUCSを獲得できないなら、申明時にadd the
android:focusable
XML atribute to the View、in your layout declaration.Set the value true.You can also declare a View as focusable while in Touch Mode with
android:focusableInTouchMode
.Bulilding Custom Components
1.VIEWを継承し、立体関数を充填し、ここで属性パラメータをXMLから取得できます.
ほぼ確実にOMEASUREをカバーします.ONSDRAWをカバーする必要があるかもしれません.もしSHOWの何かを考えたら.
デフォルトのONSDRAWは何もしません.OMEASUREは100*100サイズを差し上げます.
他にもいくつかのONがあります.カバーが必要です.
あなたのVIEWのOMEASUREは、measrement width and heightを計算します.この二つのサイズはVIEWを表示するために使われます.
サイズはパラメータ(
widthMeasureSpec
and heightMeasureSpec
)に規定されているはずです.もちろん彼も彼らを超えるように選択できます.もしそれを超えたら、PARTはincluding clipping、scrolling、throwing an exception、or asking the
onMeasure()
to try again、perhaps with different specificationを含むいくつかのことを選択できます.Onese the width and height are cacalculated,the
setMeasuredDimension(int width, int height)
method must be caled with the calculated measrements.The custom View is defined in the LabelView class.
compund componentを作成します.
1.統合LAYOUTのクラスを作って、コンボボックスを例にとって、私はLINEARLAYA OUTで水平方向のを持っています.
もちろん、LAYOUTを入れ子して、任意の複雑な部品を作ってもいいです.XMLを説明する方式で、含まれている部品を作成したり、コードを作成したりできます.
2.コンストラクタでSUPERコンストラクタを呼び出して、ここでEditText field and the PopListを作成できます.
注意してください.XMLでは自分の属性パラメータを導入しているかもしれません.ここで入手できます.
3.いくつかの事件を作成し、彼が含むVIEWとして聞き込みます.
4.自分の属性のためにアクセスを作成することができます.例えばEDIETEXT値が設定されます.
5,もしLAYOUTを継承したら、
onDraw()
and onMeasure()
をカバーする必要がない.彼らのデフォルトの行動が十分であるからだ.上書きもできますThe cores ponding classis in the sample code are
List4.java
and List6.java
.public static class MyEditText extends EditText
This is a cleaner way to create inner classis if they do need access to state from the outer class,keeps the generand class small,and allows it to be used easure from the class.(カスタムVIEWがinflated from an XML layout fileであれば、パラメータ付きのコンストラクタ(Contect context,AttributeSet atrs)が呼び出されます.
あなたのコンストラクタではSUPERを呼び出すことを覚えておいてください.
どうカスタマイズしたVIEWを使いますか?ここに一つの例があります.
<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" />
How Android Draws ViewACTがフォーカスを受けると、このLAYOUTのツリーレベルのルートノードから描き始める.
木に沿って、上から下まで、すべてのGROUTPは彼の子供に自分を描くようにお願いします.(DRAWを通じて)
父はいつも最初に描いて、そして兄弟です.
LAYOUTを描くには二つの過程があります.MEASURE、LAYOUT
MEASUREプロセスもまた、トップダウンプロセスである.implemented in
measure(int, int)
.各VIEWは、この再帰プロセスにおいてサイズ仕様を推進し、MEASUREが終了すると、各VIEWは彼のMEASUREMENTSを記憶している.
LAYOUTも同じように、トップダウンしています.この過程で、各PARDENTが彼の子供の位置付けを担当しています.MEASUREプロセスで計算したサイズです.
When a View's
measure()
method returns,its getMeasuredWidth()
and getMeasuredHeight()
values must be set,along with those for all of that View's descendantsMEASUREプロセスは、2つのクラスで通信し、DIMENSIONSに行く.
The View.Meass respec class is used by View to tell their parents how they want to be meass red and positiond.The base LayoutParams class just describes how big the View to for both width and height.
For each dimension,it can specify one of:
ACTが彼のコンテンツを表示し始めると、まずルートノードVIEWGROUTPから開始する.
VIEWGROUTを描くということはMEASURE、LAYOUTを使って彼のサブVIEWを測定します.この過程は終わりました.
VIEWGROUTPが呼び出されます.
dispatchDraw、そして順番にVIEWのDRAWを呼び出します.
VIEWGROUP:OMEASURE-->ONSLAYOUT-->DISPATCHDRAW--> VIEW'S ONSDRAW.
view groupでは自分が描かれるのを防ぐためのマークを設定しました.LAYOUT自体は絵を描く必要がないので、あなたもこのマークを設定できます.
だからiewgroupを継承してODRAWを実現して、役に立ちません.
...
Usually,a View Group cars mease()on its children from its own Measre()method.Simillarly,you must cal the layout()method of the children from Layout()
Note that for performance reasons,oneMeasre()is not necessarlycall evertime me me asre()iscaled.The view ssstem tries to smart and will invokeonMease()only when View Alewhave might have changed changed bodbobobodboboboboboboboddddbobobobobobobobobobods.inininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininis caled on a View,onLayout()will also be caled.
Last but not least,drawing is a bit different.At drawing time,View Group will enter the draw()method and instead of going through onDraw(),it will invoke dispatDraw(),hich will will in turn.carn.