2012-02-15 6 views
1

レイアウトでincludeを使用する場合は、幅と高さを両方ともincludeタグとそれがリンクされているレイアウトに設定する必要があります。それ以外の場合、正しく動作しません。したがって、includeはリンクではなく、独自の幅、高さ、IDなどを持つ場合、Viewのサブクラスであると思われます。しかしdeveloper's siteにはincludeのようなクラスはありません。あなたは誰ですか、includeViewサブクラスにはどのようなものが含まれていますか?

答えて

3

<include>タグは、内部レイアウトのコピー/ペーストと考えることができます。これは、表示Inflaterクラスにあるxml解析の一部です。それは効果的にレイアウトIDを受け取り、渡されたXMLオブジェクトを膨張させ、次にそれが含まれているレイアウトの属性に基づいて膨張しているメインレイアウトに追加します。あなたはViewから継承しているものに使用できます。

layout_を持つ属性のいずれかを上書きできます。 にはがありません。幅と高さの属性が含まれているレイアウトのルートに含まれている場合は上書きしないでください。 ただしの場合は、doは、他の属性を上書きする場合は、これらのパラメータを上書きする必要があります。これは、<include>がどのように解析されるかのバグの一部です。たとえば、layout_marginLeftを変更する場合は、パーサーが左余白属性を上書きするために、layout_widthlayout_heightをレイアウト内の同じ値に上書きする必要があります。

+0

"ただし、他の属性を上書きする場合は、これらのパラメータを上書きする必要があります。それは問題でした - 私はそれらを配置しようとし、すべてのレイアウトパラメータを "キャンセル"しました... – Gangnus

+0

したがって、すべてのインクルードに共通のインクルードでいくつかのパラメータを作成したい場合は、内部レイアウトにルートレイアウトを追加する必要があります。 – Gangnus

+0

@Gangnusの** included **レイアウト、はい(これはあなたが "内部"という意味を持つことを希望します)。 – Felix

1

include実際には、含まれるレイアウトのルート要素の幅と高さを指定する場合、幅と高さは必要ありません。言い換えれば、これは完全に有効です。

<include layout="@layout/my_included_layout" /> 

限りmy_included_layoutはそれが幸せになります幅と高さを持つルート要素を持っているよう。

+0

申し訳ありません。一時間前、私は別の会社の同僚と会いました。独立して、参照レイアウトの幅と高さを*と*の両方を設定せずに、インクルードの配置は機能しません。彼のレイアウトでも私のレイアウトでも。私はこの人を私の人生では初めて見ました。私は、独立した試験者によって積極的にチェックされた考えを信頼するように傾きます。 – Gangnus

+0

十分に良い。私は現在、私のオープンプロジェクトだけで39を含んでいますが、私はそれらのどれにでも幅や高さを指定していません。私は私が適切に配置されていることを保証することができます。あなたは何をしているのかはっきりしていませんが、おそらく例を投稿していますか? –

+0

別の答えでDeeVが原因を説明しました。 – Gangnus

関連する問題