4

コンテナーからすべての子に状態の変更を適用するカスタム複合コントロールを作成するときの適切なメカニズムを知っている人はいますか? ViewGroupすべての状態の変更 (押されている、有効になっているなど) を各子に転送するように設定する簡単な方法があるはずです。

たとえば、次の行に沿ってカスタム ウィジェットを作成するとします。

public class MyWidget extends RelativeLayout {

    private TextView mTitleView, mValueView;
    private ImageView mImageView;

    public ValueButton(Context context) {
        this(context, null);
    }

    public ValueButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        //View setup, etc.
    }
}

多くの場合、ウィジェット全体に変更が適用されるときに切り替えたい子に描画可能リストまたはカラー ステート リストがアタッチされています。このようなウィジェットに何を追加すれば、たとえば、呼び出しMyWidget.setEnabled()たときやMyWidget押されたときに、これらの状態の変化が階層の下にフィルター処理されるようにする必要がありますか?

ありがとう!

4

2 に答える 2

3

android:duplicateParentState="true"各子に追加します(おそらく を使用して子を反復処理しますgetChildAt(int index))

http://developer.android.com/reference/android/view/View.html#attr_android:duplicateParentState

編集:xmlで設定する必要があります

注: 現在の実装では、ビューが ViewGroup に追加された後にこのプロパティを true に設定しても、まったく効果がない可能性があります。このプロパティは、常に XML から使用するか、このビューを ViewGroup に追加する前に true に設定する必要があります。

于 2011-06-16T22:35:10.587 に答える
0

ここで役立つかどうかはわかりませんが、非常に似たようなことをしたいと思うので、考えるのは興味深い問題です。

状態情報を子ビューにカスケードするという点では、可能なアプローチの 1 つは、親 ViewGroup にその状態情報のみを含め、子ビューで getParent() を使用してその情報にアクセスすることでしょうか?

于 2011-06-16T21:57:08.437 に答える