1

ViewGroup を拡張してカスタム ビューを作成しました。私の問題は次のとおりです。

child( addView(chileView) ) ビューを ViewGroup に追加するときに、子ビューがインフレートされたビューである場合、子ビューは表示されません。ただし、子ビューがハードコード ビュー ( btn = new Button(ctx) など) の場合は表示されます。

コード、非表示:

public class EdgeSwiper extends ViewGroup{

    public EdgeSwiper(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    public EdgeSwiper(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public EdgeSwiper(Context context) {
        super(context);
        init(context);
    }
    View v;
    private void init(Context context) {
        v = View.inflate(context,R.layout.aview,null);
        this.addView(v);
    }

    @Override
    protected void onLayout(boolean arg0, int a, int b, int c, int d) {
        v.layout(a, b,  c, d);
    }
}
4

1 に答える 1

1

考えられるすべてのことを頭の中で実行した後、いくつかの可能性をチェックするために、これと同じダミー プロジェクトを作成しました。何らかの理由で、ViewGroup の代わりに FrameLayout から ViewChanger を拡張すると、これが機能します。おそらく、ViewGroup には chidl ビューをレンダリングするために必要なものがないためです (onDraw をオーバーライドしようとしましたが、それでも機能しませんでした)。一度に 1 つのビューしか表示していないため (FrameLayout の通常の使用法)、この変更を行うことをお勧めします。ViewGroup で欠落している描画機能を分離して修正するよりもはるかに簡単です。

    public class EdgeSwiper extends FrameLayout {

元の設計 (コンストラクターからのビューの追加) を適切に機能させるために必要な変更は、これだけです。

于 2013-05-29T09:14:24.893 に答える