3

私はこれを読んだ

「以前は、AndroidはRelativeLayoutで定義されたルールを処理するためにシングルパスを使用していました。つまり、XMLで宣言されるまで、ウィジェットを参照できませんでした(たとえば、android:layout_aboveを介して)。これにより、一部のレイアウトの定義が行われました。少し複雑です。Android1.6以降、Androidは2つのパスを使用してルールを処理するため、未定義のウィジェットへの前方参照を安全に行うことができます。」

何が問題なのかはわかりませんが、2.3を使用しても、ジェットとして宣言されていないビューを参照すると問題が発生するため、Androidは2つのパスを使用してルールを処理していないようです。相対的なレイアウト。

注:ウィジェットを宣言するときは常に@ + id / widget_nameを使用し、他のウィジェットからそのウィジェットを参照するときは@ id/widget_nameを使用します。そのウィジェットを参照したい場合でも、@ + id/widget_nameを使用できることに気づきました。私はそれが間違っていると思いますが、なぜ時々文句なしに動作するのですか?私の意見では、1つのウィジェットを1つだけ宣言できるようにする必要があります...

私の質問は、Androidは実際に2つのパスを使用するということですか?相対的なレイアウトを操作するためのガイドライン(ベストプラクティス)が必要です

この相対的なレイアウトのペアリングがどのように行われるかについては少し混乱しているので、説明を歓迎します

ありがとう

4

2 に答える 2

2

@+id/nameまだ存在しない場合は、新しい ID を作成します。@id/name既存の ID を参照し、ID を作成することはありません。

同じファイルで@id/namebeforeを使用できるかどうかはわかりません。@+id/nameそうでない場合は、次の 2 つの回避策が考えられます。

  1. 常に使用します@+id/name

  2. ids.xmlファイル内のすべての ID を定義し、常に@id/name.

于 2011-09-12T09:56:05.707 に答える
1

This is general information on how Android draw views. I think that Android passes twice through all the view, but it doesn't pass through each single view once. So if you have a reference from one xml to another it will always work fine, but if you have references inside a single xml you must be carefull to order the elements in the xml correctly. For example, I have view1 and view2 in my RelativeLayout. If I want to refer to view2 from view1 I must declare view2 before view1.

于 2011-09-12T09:10:56.380 に答える