さて、再利用可能なコンポーネントをいくつか作成しようとしています。基本的に、以下で構成される複合レイアウトがあります。
-- ヘッダー
-- 説明
-- (任意の数のコントロール)
-- フッター
そのため、テキストやその他の変数のカスタム属性を使用して、ヘッダーとフッターを自動的に追加するカスタム ViewGroup があります。
それはすべてうまくいきますが、次のように XML でコントロール ビュー (非常に特殊なレイアウトを持つ) を指定できるようにしようとしています。
<com.mypackage.CustomLayout
///...
>
<com.mypackage.CustomControl
//attributes
/>
<com.mypackage.CustomControl2
//attributes
/>
<com.mypackage.CustomControl3
//attributes
/>
</com.mypackage.CustomLayout>
私のカスタム コントロールでは、すべて次の一般的なパターンに従います。
レイアウト XML の例
<merge
android:layout_width="match_parent"
android:layout_height="100dp"
//Attributes
>
<OtherView/>
<OtherView/>
</merge>
対応するコントロール ビュー
public class ControlView extends LinearLayout {
public ControlView (Context context) {
super(context);
init();
}
public ControlView (Context context, AttributeSet attrs) {
super(context, attrs);
init();
parseAttributes(attrs);
}
public ControlView (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
parseAttributes(attrs);
}
private void init () {
LayoutInflater i = LayoutInflater.from(getContext());
i.inflate(R.layout.example_layout, this);
//Initialize subviews
}
}
問題は、マージ タグのパラメーターが無視されることです。マージ タグで定義されたレイアウト パラメーターを使用する代わりに、カスタム コントロールごとlayout_width
にパラメーターを追加する必要があります。layout_height
メソッドでLayoutParams を設定しようとすると、属性が必要init()
であることを示す実行時例外が引き続き発生します。layout_width
layout_height
私がやっていることを行うためのより良い方法はありますか? LayoutParams
XML で提供されるパラメーター (存在する場合) に関係なく、カスタム コントロールの任意のインスタンスにプリセットを提供したいと思います。